Content Management Guide

To be Reviewed

Managing content across packages and services — the Content Archive, content assignments, media (images and video), itinerary content, and how content relates to departure variations.

Version 14 min read | March 23, 2026 Gallery

Overview

Content in Kaptio is managed through a centralized Content Archive (Content__c) with Content Assignments that link content to packages, services, locations, images, videos, and other records. This separation means one piece of content can be reused across multiple contexts, and content can be maintained independently from product setup.

This guide covers how content works, how to create and assign it, how media is managed, and how content interacts with departure variations in Fixed packages.

Prerequisites


Part 1: The Content Archive

Understanding Content Records

Every piece of content — a description, an itinerary narrative, a destination overview — is stored as a Content__c record. Each record belongs to a record type that determines the editing context:

Content Record TypeUsed For
PackagePackage-level descriptions, overviews, marketing copy
ItemService-level descriptions (hotel details, activity descriptions, transfer notes)
DestinationLocation and destination overviews
AgendaDay-by-day agenda content (structured blocks)
ShipVessel descriptions (cruise products)
CabinTypeCabin category descriptions
GenericGeneral-purpose content not tied to a specific context

When creating content from a package, the record type is automatically set to Package. When creating from a service record, it is set to Item. The record type controls which fields and field sets are available in the content editor.

Key Content Fields

FieldPurpose
TitleHeadline for the content block
SubtitleSecondary heading
BodyRich text body content
Featured ImagePrimary image for the content
LanguageContent language for multi-language setups
TagsTagging for search and filtering

Content records support structured block formats (JSON) for agenda-style content, where each block represents a day or segment with its own title, body, and media.


Part 2: Content Assignments

How Assignments Work

A Content Assignment (ContentAssignment__c) is the link between a content record and the entity it describes. Assignments are children of Content__c (master-detail) and point to one target record via lookup fields.

Rule: Each assignment can link to only one target entity, with two exceptions:

  • A Service (Item__c) + Price Category combination is allowed
  • A Service (Item__c) + Add-on combination is allowed

This rule is enforced in the platform and prevents ambiguous content mappings.

Assignment Targets

Content can be assigned to any of these entities:

TargetField on AssignmentExample Use
PackagePackage__cPackage overview, marketing description
ServiceItem__cHotel description, activity details
Package DayPackageDay__cDay-specific itinerary narrative
ImageImage__cLinking a content block to a photo
VideoVideo__cLinking a content block to a video
LocationLocation__cDestination description
Price CategoryPriceCategory__cRoom type or fare class description
Add-onAddon__cAdd-on description
TagTag__cTag-based content grouping

Creating Assignments

  1. Navigate to the content record (or create one from the package/service context)
  2. In the Assignments related list, click New
  3. Select the target entity (e.g., a specific package or service)
  4. Save

The content is now linked. When an itinerary is built from that package or includes that service, the content engine can pull the assigned content for document generation.


Part 3: Package-Level Content

Setting Up Package Content

Package content describes the overall product — the marketing overview, the trip summary, the highlights.

  1. Open the package record
  2. Navigate to the Content section
  3. Click New Content (or link to an existing content record)
  4. The content record type is automatically set to Package
  5. Enter the title, body, and any media
  6. Save — the content assignment linking this content to the package is created automatically

Content Per Package Day

For day-by-day itinerary content, use Package Day assignments:

  1. Ensure Package Days are configured on the package
  2. Create content records for each day
  3. Assign each content record to the corresponding Package Day via PackageDay__c on the assignment

This produces structured day-by-day narratives that flow into itinerary documents.


Part 4: Service-Level Content

Setting Up Service Content

Service content describes individual supplier offerings — hotel details, activity descriptions, transfer logistics.

  1. Open the service record
  2. Navigate to the Content section
  3. Click New Content
  4. The content record type is automatically set to Item
  5. Enter the content
  6. Save

Content by Price Category

For services with multiple price categories (e.g., Standard Room vs Deluxe Suite), content can be scoped to a specific price category:

  1. Create a content record
  2. On the assignment, set both Item__c (the service) and PriceCategory__c (the room type)
  3. This is one of the two permitted dual-target assignment patterns

The system will use price-category-specific content when available, falling back to the general service content if no category-specific content exists.

Content by Record Type

Different service record types (Accommodation, Activity, Rail, Transfer, etc.) may need different content structures. The content editor adapts based on the Content__c record type and the associated field sets:

  • Accommodation services typically need room descriptions, amenity lists, and check-in information
  • Activity services need itinerary details, duration, and what’s included
  • Rail services need route information, class descriptions, and timetable notes
  • Transfer services need pickup/dropoff details and vehicle information

The field sets displayed in the content editor are determined by the Content__c record type, which is set automatically based on the context where content is created.


Part 5: Media Management

Images and Videos

Media in Kaptio is managed through dedicated objects:

ObjectPurpose
Image__cPhoto assets with S3 URLs
Video__cVideo assets

Media is linked to content through Content Assignments. The Image Library provides a UI for browsing and selecting images in different contexts:

  • Service media — images and videos for a specific service
  • Package media — images and videos for a package
  • Content editor — media selection while editing content

Adding Media to Content

  1. Open the content record in the editor
  2. Use the Image Library to browse or upload images
  3. Select images to attach — this creates Content Assignments linking the content to Image__c records
  4. Featured images can be set on the content record directly via the FeaturedImage__c field

The Featured_Image__c field on the Service object (Item__c) is deprecated. Use the Content Archive approach (content + image assignments) for all new media setup.

Media Integrations

For organizations using external media services, the Content Integrations module (IntegrationsService, ContentSearchController) supports importing images and videos from third-party providers into the Kaptio Image and Video libraries.


Part 6: Content and Departure Variations

How Departure Variations Affect Content

For Fixed departure packages, components can be configured to apply to all departures or selected departures via the DepartureMode__c field on the component. This is managed through ComponentDepartureAssignment__c records that link specific components to specific departures.

When components vary by departure, the content attached to those components may need to vary as well. For example:

  • A summer departure uses Hotel A (with Hotel A’s content)
  • A winter departure uses Hotel B (with Hotel B’s content)

Since content is assigned to services (not to departures directly), the variation happens naturally: when the component option changes per departure, the content follows the assigned service.

Where it gets complex:

  • Package-level content (overview descriptions) may need to account for departure-specific differences
  • Day-by-day content may need different narratives for different departure variations
  • Marketing copy may need to highlight seasonal features that vary by departure

For these cases, consider:

  1. Using generic package-level content that works across all departures
  2. Creating departure-specific Package Day content where the itinerary narrative truly differs
  3. Keeping service-level content accurate for each service variant — the right content will flow through automatically when the correct service is selected

Part 7: Itinerary Content

From Content Archive to Customer Documents

When an itinerary is created from a package, the content engine pulls assigned content and renders it into customer-facing documents:

  1. Content selection — the system reads content assignments for the package, its services, and package days
  2. Content renderingContentFactory and GlobalContentService process the content blocks (including agenda JSON, rich text, media references)
  3. Document output — rendered content flows into ItineraryContent__c records, which are the published customer documents

The ItineraryContent__c object holds the final rendered content with fields for templates, stages, status, and banner images.

Content Override at Itinerary Level

Once an itinerary is created, content can be edited at the itinerary level without affecting the source content archive:

  1. Open the itinerary
  2. Navigate to the Content section
  3. Edit the content — changes are stored on the ItineraryContent__c / ItineraryContentLineItem__c records
  4. Changes do not flow back to the source Content__c record

This allows per-booking customization (adding a personal note, adjusting descriptions for a specific guest) without affecting the master content.


Validation Checklist

Before publishing content:

Package Content

  • Package has a content record with the Package record type
  • Title and body are populated with customer-ready text
  • Featured image is set
  • Package Day content exists for each day of the itinerary
  • Content assignments link to the correct package

Service Content

  • Each service has a content record with the Item record type
  • Price-category-specific content exists where room types or fare classes have distinct descriptions
  • Media (images, videos) is attached via content assignments
  • Content is appropriate for the service record type (accommodation, activity, rail, etc.)

Media

  • Images are uploaded to the Image Library (Image__c)
  • Featured images are set on content records
  • No broken media references (S3 URLs are valid)

Common Issues and Solutions

IssueLikely CauseSolution
Content not appearing on itineraryContent assignment is missing or links to the wrong package/serviceVerify the assignment record; check that the correct entity is in the lookup field
Wrong content showing for a serviceMultiple content records assigned; wrong one is prioritizedReview all assignments for the service; remove duplicates
Media not displayingImage record exists but S3 URL is broken or expiredRe-upload the image; verify S3_Url__c on the Image__c record
Content editor showing wrong fieldsContent record type doesn’t match the contextVerify the Content__c record type; re-create the content from the correct context if needed
Changes to content not appearing on existing itinerariesItinerary content is a snapshot — changes to the archive don’t flow to existing itinerariesEdit the ItineraryContent__c record directly, or regenerate the itinerary content

ObjectAPI NamePurpose
ContentKaptioTravel__Content__cThe Content Archive — stores descriptions, narratives, and structured content
Content AssignmentKaptioTravel__ContentAssignment__cLinks content to packages, services, locations, media, and other entities
ImageKaptioTravel__Image__cPhoto assets in the media library
VideoKaptioTravel__Video__cVideo assets in the media library
Itinerary ContentKaptioTravel__ItineraryContent__cPublished content on a customer itinerary
Itinerary Content Line ItemKaptioTravel__ItineraryContentLineItem__cLine-level structure within itinerary content
Package DayKaptioTravel__PackageDay__cDay records within a package for day-by-day content

See Also

Back to Gallery