Overview
Suppliers and services form the foundation of every package in Kaptio. Whether you are building an Anyday city break, a Seasonal brochure product, or a Fixed group departure, the underlying data is the same: a supplier provides services, and those services carry pricing through price categories.
Getting this layer right determines everything downstream. A misconfigured service means incorrect pricing. A missing price category means an occupancy type cannot be booked. This guide covers the supplier-to-price-category setup so that every package you build sits on a solid, validated foundation.
By the end of this guide you will have created services, configured service settings, and defined price categories. For inventory setup — creating contracts, generating allotment days, and managing availability — continue to the Inventory Operations Guide.
Prerequisites
Before beginning supplier and service setup, ensure the following are in place:
- Business Unit configured with the correct currency and tax settings (Organization Structure Guide, Currency & Tax Configuration)
- Supplier accounts created in Salesforce — standard Account records with the appropriate supplier record type
- Pricing strategy defined — you should know what occupancy types, age bands, or cabin classes your services will offer before creating price categories
- Admin or Product Manager access in Kaptio
Part 1: The Foundation Model
Supplier Setup Best Practices
Supplier Account Structure
How you structure supplier accounts affects pricing, inventory, and booking flows across all packages.
| Pattern | When to Use | Example |
|---|---|---|
| One account per property | Hotels and lodges where each property is a distinct supplier | ”Hotel Centrale” as a supplier with all its services underneath |
| One account per management group | Hotel chains or management companies that provide contracted rates centrally | ”Luxury Hotels Group” as the supplier, with individual properties as services |
| One account per API connection | Suppliers connected via Kaptio Connect where rates come from an external system | The API supplier account, with connected services receiving dynamic pricing |
Tip: If you have both contracted (manually priced) and API-connected rates for the same property, consider creating separate services under the same supplier — one for contracted rates and one for the API feed. This keeps pricing sources separate and avoids confusion when costs differ between the two.
Contracted vs API-Connected Suppliers
| Aspect | Contracted (Manual) | API-Connected (Kaptio Connect) |
|---|---|---|
| Cost entry | Manually entered via Price Manager | Automatically imported from external system |
| Pricing updates | Requires manual update when supplier changes rates | Updates automatically when the feed refreshes |
| Inventory | Managed through inventory contracts and allotment days | May be managed externally with availability sync |
| Best for | Suppliers with annual rate sheets, negotiated contracts | Suppliers with dynamic pricing, GDS connections, channel managers |
For API-connected supplier setup, see the Kaptio Connect Integration guide.
Planning Your Service Catalog
Before creating services, plan your catalog:
| Question | Why It Matters |
|---|---|
| How many distinct supplier services do you offer? | Determines the number of service records you need |
| What occupancy or passenger types apply? | Determines price category structure |
| How are your rates structured — by season, by date, flat? | Determines price season configuration |
| What naming convention will you use? | Critical for managing a large catalog |
Tip: Invest time in naming conventions before creating your first service. A catalog of 50 services is manageable with any naming scheme. A catalog of 500 services requires a disciplined convention or it becomes unworkable.
Service Record Types
Kaptio supports the following Service Record Types. Choose the type that best matches the supplier service:
| Service Record Type | Use For | Examples |
|---|---|---|
| Accommodation | Hotels, lodges, resorts, guesthouses | ”Riverside Hotel”, “Mountain Lodge” |
| Activity | Tours, excursions, experiences | ”City Walking Tour”, “Wine Tasting Experience” |
| Transfer | Ground transport between locations | ”Airport Shuttle”, “Private Car to City Center” |
| Meal | Dining services | ”Welcome Dinner”, “Breakfast Package” |
| Flight Placeholder | Flights not available through electronic booking channels, where flight information is manually entered | ”Client arranged own flights” |
| PNR Flight | Flights booked via a GDS and imported to Kaptio Travel | ”Flight booking via Amadeus or similar GDS” |
| Insurance | Travel insurance products | ”Comprehensive Travel Cover” |
| Supplement | Add-on charges and surcharges | ”Single Supplement”, “Peak Season Surcharge” |
| Miscellaneous | Anything that does not fit another type | ”Visa Assistance”, “Luggage Forwarding” |
Record Type Specifics: Rail, Flights, and Transport
Rail, flight, and transport services have additional configuration options that do not apply to accommodation or activity services.
Rail services (record types: MultidayRail):
| Feature | How It Works |
|---|---|
| Fare Class | The FareClass__c field on component options controls which fare tier (e.g., Economy, Business, First Class) applies when the service is assigned to a package. Fare classes are defined on RailFare__c records and linked to component options. |
| Arrival / Departure Locations | Component options for rail and transport services can specify ArrivalLocation__c and DepartureLocation__c via service location junctions. This defines the route segment (e.g., City A to City B). |
| Available Times | The AvailableTimes__c field on component options holds the time schedule for the service (departure times, arrival times). |
| MultidayRail | A separate record type for rail journeys spanning multiple days (e.g., scenic train routes with overnight segments). Pricing and allotment cover the full multi-day journey rather than individual segments. |
Flight services (record types: Flight Placeholder, PNR Flight):
| Feature | How It Works |
|---|---|
| Flight Placeholder | Use for flights which are not available through traditional electronic booking channels, for which you need to manually input flight information. Typical example: “Client arranged own flights”. |
| PNR Flight | Use for flights that are booked via a GDS and imported to Kaptio Travel. Typical example: flight booking via Amadeus or similar GDS. PNR data is imported and linked to the itinerary. |
Transfer services (record type: Transfer):
| Feature | How It Works |
|---|---|
| Route-based pricing | Transfers are typically priced per booking (not per night), so set Allocation Type to Per Booking. |
| Pick Up / Drop Off | Controlled via checkboxes on the Service record: Enable Linked Services For Pick Up (creates linked services to control pick-up time from the hotel) and Enable Linked Services For Drop Off (creates linked services to control drop-off time). If Allow Own Arrangement is also checked, the user can specify their own pick-up or drop-off location and times in the Itinerary. |
Tip: When setting up rail services, create Price Categories that map to fare classes (e.g., “Standard Class”, “First Class”). The fare class on the component option then determines which price category is used during booking. For detailed location setup including train stations, see the Location Setup Guide.
Part 2: Creating Services
Step 1: Create a Service Record
Navigate to the Services tab in the Kaptio app and click New.
Required fields:
| Field | Description | Example |
|---|---|---|
| Service Name | Descriptive name for the service | ”Mountain Lodge” |
| Supplier | Lookup to the supplier account | Mountain Lodge Resort |
| Service Record Type | Category of service | Accommodation |
| Active | Whether the service is available for use | Checked |
Screenshot of the New Service form showing the required fields: Service Name, Supplier lookup, Service Record Type, and Active checkbox
Save the record. You now have a service that can be assigned to package components and configured with pricing.
Step 2: Configure Service Settings
After creating the service, review and set additional fields:
| Field | Description | Notes |
|---|---|---|
| Location | The geographic location (continent, country, city, etc.) the service belongs to | Select from the Location hierarchy configured in your org |
| Visibility Setting | Controls whether the service is visible to all channels or restricted | Options: Visible for All (default) or Restricted. If set to Restricted, you must also select an Access Rule to define which channels or travel agents can book it. See Visibility Settings & Access Rules for full details |
| Pricing Type | Determines how pricing is calculated for multi-day services | Options: Standard (price depends on number of days) or Booking (flat price regardless of duration) |
| Allocation Type | Defines how duration and pricing units are measured | Options: Per Night, Per Day, or Per Booking |
| Description | Internal description of the service | Used for internal reference, not guest-facing |
| External ID | Integration identifier | KaptioTravel__KaptioExternalId__c for third-party sync |
Important: The Service Record Type field drives downstream behavior including pricing logic, availability checking, and component assignment rules. Set it correctly at creation time.
Naming Conventions
A consistent naming convention prevents confusion as your catalog grows. Recommended patterns:
| Pattern | Example | When to Use |
|---|---|---|
Service Name | ”Mountain Lodge” | Default for accommodation — the Service is the property itself |
Supplier — Activity (Location) | ”City Tours — Walking Tour (Old Town)“ | When a supplier offers the same activity in multiple locations, or when several suppliers provide the same tour in the same location |
Activity [Season] | ”Reykjavik Winter Highlights [Winter]“ | When the actual offering differs by season — e.g., different routes or activities, not just a price change |
Location — Service Record Type | ”Capital City — Airport Transfer” | When the location matters more than the supplier |
What is NOT a separate Service: Room types (Single, Double, Suite) are Price Categories, not Services. Board basis (Full Board, Half Board) is handled via Meal Plans on the Service. If only the price changes by season, use Price Seasons — do not create a separate Service. Only create a different Service when the actual experience or offering changes (e.g., a summer walking tour vs a winter snow-shoeing tour).
Best practices:
- Use a consistent separator (
—or-) - Include the supplier name for services that are not self-explanatory
- Avoid abbreviations that new team members will not recognize
- Keep names under 80 characters
Part 3: Defining Price Categories
Understanding Price Categories
A price category represents a pricing tier within a service. Most services need at least one price category. Common uses:
- Hotel rooms: Single occupancy, Double occupancy, Triple occupancy, Quad occupancy
- Tours and activities: Adult, Child, Infant
- Flights: Economy class, Business class, First class
- Supplements: Per-person, Per-room, Per-booking
Each price category has its own cost and sell price. When a booking is made, the system uses the price category that matches the guest configuration (number of adults, children, occupancy type).
Key concept: A service without price categories cannot be priced. Every service must have at least one price category.
Step 3: Create Price Categories
Open the service record and navigate to the Price Categories related list. Click New.
| Field | Description | Example |
|---|---|---|
| Name | Descriptive tier name | ”Double Occupancy” |
| Service | Auto-populated from the parent service | Mountain Lodge |
| Category Type | The occupancy or passenger class | ”Double”, “Adult”, “Economy” |
| Active | Whether this tier is available | Checked |
| Sort Order | Display ordering — required for Pre/Post Stay search visibility | 1, 2, 3… |
IMPORTANT
If you are loading price categories via Data Loader, data import, or any bulk method, you must populate the Sort Order field. The Salesforce UI enforces Sort Order as mandatory, but imports can skip it without error. Price categories with a blank Sort Order will work in standalone bookings but will not appear in Pre/Post Stay tabs in package search results. See Pre/Post Stay Configuration — Troubleshooting for full details.
Screenshot of the Price Categories related list on a service record, showing three categories: Single, Double, and Triple with their sort order values
Repeat for each pricing tier the service supports.
Step 4: Set Cost and Sell Prices
Each service needs cost (net) and sell (gross) prices. Prices are managed through the service’s Price Manager and Price Seasons — they are separate from inventory contracts and allotment days, which control availability only.
Prices can be set at the following levels:
- Price Category — the base cost and sell price for each occupancy or passenger tier
- Meal Plan — pricing for board basis options (e.g., Half Board, Full Board)
- Add-on — pricing for optional extras attached to the service
| Price Field | Description |
|---|---|
| Cost Price | What you pay the supplier (net) |
| Sell Price | What the guest pays (gross) |
| Markup | Difference between sell and cost (calculated or set manually depending on configuration) |
For full details on configuring Price Seasons, the Price Manager, and the five sales price modes, see the Cost & Pricing Architecture guide.
Common Price Category Patterns
Accommodation
| Price Category | Category Type | Typical Use |
|---|---|---|
| Single Occupancy | Single | 1 guest in the room |
| Double Occupancy | Double | 2 guests sharing |
| Triple Occupancy | Triple | 3 guests sharing |
| Quad Occupancy | Quad | 4 guests sharing (family rooms) |
| Child Sharing | Child | Child in existing bedding |
How Occupancy Limits Affect Search Results
Accommodation price categories have occupancy fields that control which room types appear when a traveler searches with a specific guest configuration. These fields are set on the Price Category record and are visible in the Accommodation Price Category field set.
| Field | API Name | What It Controls |
|---|---|---|
| Max Room Occupants | MaxPeople__c | Maximum total guests (adults + children) the room can hold |
| Max Adult Occupants | MaxAdults__c | Maximum number of adults allowed |
| Max Child Occupants | MaxChildren__c | Maximum number of children allowed |
| Max Infant Occupants | MaxInfants__c | Maximum number of infants allowed — enforced during booking (passenger assignment) rather than search filtering |
| Min Occupancy | MinOccupancy__c | Minimum number of guests required for the room — used in cabin/cruise workflows for occupancy validation |
During an accommodation search, the system evaluates each price category against the guest configuration in the search request. If any maximum is exceeded, that room type is excluded from results. The check runs for every room in the request — a room type must be able to accommodate the guests in each individual room to appear.
Example: A “Family Room” price category configured with Max Room Occupants = 4, Max Adults = 2, Max Children = 2:
| Search Request | Shown in Results? | Why |
|---|---|---|
| 2 adults | Yes | Within all limits |
| 2 adults, 1 child | Yes | 3 total ≤ 4 max, 2 adults ≤ 2 max, 1 child ≤ 2 max |
| 2 adults, 2 children | Yes | 4 total ≤ 4 max, all occupant limits met |
| 3 adults | No | 3 adults exceeds Max Adults (2) |
| 2 adults, 3 children | No | 5 total exceeds Max Room Occupants (4), and 3 children exceeds Max Children (2) |
| 1 adult | Yes | Within all limits |
Tip: If you leave the occupancy fields blank on a price category, the system treats them as unrestricted — the room type will appear in search results regardless of how many guests are in the request. Only set these fields when you need to enforce specific capacity constraints.
Tip: Occupancy limits apply across the platform, but behave differently depending on context. In Package Search, the limits hide rooms that don’t fit the guest configuration — they won’t appear in results at all. In Builder, Costings, and Booking Wizard, the same limits constrain how many passengers you can assign to a room. The underlying data (the five fields on Price Category) is the same everywhere.
Tours and Activities
| Price Category | Category Type | Typical Use |
|---|---|---|
| Adult | Adult | Guests aged 12+ (or as defined) |
| Child | Child | Guests aged 2–11 |
| Infant | Infant | Guests under 2 (often free) |
| Senior | Senior | Discounted rate for older guests |
Flights (Flight Placeholder / PNR Flight)
| Price Category | Category Type | Typical Use |
|---|---|---|
| Economy | Economy | Standard seating |
| Business | Business | Premium seating |
| First Class | First | Luxury seating |
Next Steps
With services and price categories in place, the next step is to understand how cost modes and sales pricing work together. Head to the Cost & Pricing Architecture guide for the full breakdown. Then, when you’re ready to manage availability, see the Inventory Operations Guide for contract setup, allotment days, and availability controls.
How Services Connect to Packages
Services are the bridge between suppliers and packages. They are not assigned to packages directly — they are assigned to components within a package. This separation is intentional:
- A single service (e.g., “Mountain Lodge”) can be assigned to components in many different packages.
- A component can have multiple services assigned, allowing the system to offer alternatives or service level tiers.
- Pricing flows from the service’s Price Manager and Price Seasons, not from the package or component.
This means you build your service catalog once and reuse it across your entire product range.
For the full inventory chain model — how packages, components, services, inventory contracts, and allotment days connect — see the Inventory Operations Guide.
Validation Checklist
Before using services in packages, verify each step:
Supplier Account
- Supplier account exists with the correct record type
- Account is active and has accurate contact information
Services
- Service Name follows your naming convention
- Service Record Type is correctly set (Accommodation, Activity, Transfer, etc.)
- Active checkbox is checked for services ready to use
- Service Record Type, Location, Visibility Setting, Pricing Type, and Allocation Type are configured
Price Categories
- Every service has at least one price category
- Price category names are descriptive and consistent
- Category types match the occupancy or passenger classes you support
- Cost and sell prices are populated (on the price category, meal plan, or add-on)
- Sort Order is set on every price category (required for Pre/Post Stay tabs in package search; bulk imports can leave it blank)
End-to-End Verification
- Use the Costings / Builder for a date within the contract
- Confirm cost and sell price return correctly — for detailed verification, see the Cost & Pricing Architecture guide
- For inventory and availability verification, see the Inventory Operations Guide
Common Issues and Solutions
Service Not Appearing on Component
If a service books fine standalone but never appears under Package Search Pre/Post Stay tabs, check Sort Order on every price category before other troubleshooting. Blank Sort Order is common after bulk import or Data Loader: the load succeeds, but the package search results builder drops those categories when grouping Pre/Post Stay options.
| Cause | Solution |
|---|---|
Service is inactive (Active = false) | Check the Active checkbox on the service record |
| Service Record Type does not match the component type | Verify the Service Record Type is compatible with the component (e.g., an Accommodation component only shows Accommodation services) |
| Supplier is inactive or does not match a single-supplier package | Check that the supplier account is active, and if the package is restricted to a single supplier, ensure the service belongs to that supplier |
| Price categories have no Sort Order | The package search results builder requires Sort Order to group and display services in the Pre/Post Stay tabs. If Sort Order is null, the service works in standalone bookings but silently disappears from Pre/Post Stay results. Populate Sort Order on all price categories for the service. Query to find affected records: SELECT Id, Name, KaptioTravel__SortOrder__c FROM KaptioTravel__PriceCategory__c WHERE KaptioTravel__Item__c = '<service_id>' AND KaptioTravel__SortOrder__c = null |
Pricing Incorrect or Missing
| Cause | Solution |
|---|---|
| No price categories on the service | Create at least one price category |
| Price category has no cost/sell price | Populate prices on the price category, meal plan, or add-on via the Price Manager |
| Price Seasons not configured | Check that Price Seasons cover the requested travel dates in the Price Manager |
| Currency mismatch | Check the currency rate on the Itinerary to convert the value to the expected currency |
Related Schema Objects
| Object | API Name | Purpose | Key Fields |
|---|---|---|---|
| Supplier Account | Account (supplier record type) | The vendor providing the service | Name, Record Type, Active |
| Service | KaptioTravel__Item__c | A specific service offered by a supplier | Name, Supplier, Service Record Type, Active |
| Price Category | KaptioTravel__PriceCategory__c | Pricing tier within a service | Name, Item, Category Type, Cost, Sell, Sort Order |
| Package | KaptioTravel__Package__c | Top-level product container | Name, Departure Type |
| Component | KaptioTravel__PackageComponent__c | Trip segment within a package | Name, Type, Position, Duration |
| Component Service | KaptioTravel__PackageComponentItem__c | Links a service to a component | Component, Item, Default, Service Level |
See Also
- Package Fundamentals — shared package fields, components, and options
- Inventory Operations Guide — inventory setup, day-to-day allotment management, and release tiers
- Cost & Pricing Architecture — pricing modes, margins, add-ons, fees, and taxes
- Content Management Guide — managing content across packages and services
- Pre/Post Stay Configuration — flexible accommodation nights with PreNight/PostNight allocation
- Location Setup Guide — locations including rail stations and route points
- Kaptio Connect Integration — API-connected supplier setup
- Package Search Troubleshooting — diagnosing search and availability issues