# Trip, destination and guide pages

> How pages built from Travel Orbit's templates are delivered, and how to render them with the SDK.

Source: https://docs.bifrostorbit.com/cms/developers/travel-pages/

A space connected to Travel Orbit has three page templates: Trip page, Destination page and Guide page. Their addresses use `{slug}`, such as `/trips/{slug}`. When no CMS page has the address asked for, `getPage` and `resolve` answer with the matching template's blocks and the item from Travel Orbit, in one call.

## What arrives

```ts
const page = await cms.getPage({ path: '/trips/lofoten-ridge-walk' });
page.contentType; // "travelTripPage"
page.travel;      // { kind: "trip", slug: "lofoten-ridge-walk", trip: CmsTripPage }
```

`travelOf(page)` returns `{ trip, destination, guide }` with the one the page shows. Each section block, such as `travelTripHero` or `travelGuideStory`, also has the item in its fields as `trip`, `destination` or `guide`, so a registry renderer gets what it needs. Other blocks on the template arrive as usual. Search engine data, structured data and the sitemap are built from Travel Orbit.

## Sections

| Template | Blocks |
| --- | --- |
| Trip page | `travelTripHero`, `travelTripOverview`, `travelTripItinerary`, `travelTripBooking`, `travelTripGuides`, `travelTripStays`, `travelTripIncluded`, `travelTripGallery` |
| Destination page | `travelDestinationIntro`, `travelDestinationFacts`, `travelDestinationGuide`, `travelDestinationTrips` |
| Guide page | `travelGuideProfile`, `travelGuideStory`, `travelGuideTrips` |

Each has an optional `heading`. Render them in the order they arrive: editors arrange them.

## Images

Travel Orbit's images have the same shape as CMS images and the same address convention, so `<CmsImage>` serves smaller copies and AVIF without extra work.

## Lists and links

`getTravelTrips`, `getTravelDestinations` and `getTravelGuides` return everything for trip finders and grids. Trips everywhere, on template pages, in fields and in `getTravelTrips` (which takes `region`), have `priceFrom` in the region's currency when the trip is sold in it, with `currency` saying which and `tripCurrency` the trip's own. Link with `pageUrl`, the item's page on your website; `url` is the booking site. Publishing a template refreshes every page; a changed trip refreshes its own page.

## Changed addresses

When a trip's address name changes in Travel Orbit, or a guide's name and with it their address name, the old address keeps working: `resolve` answers with a permanent redirect (308) to the new one, such as `/trips/lofoten-walk` to `/trips/lofoten-ridge-walk`, and `followResolution` from the SDK follows it. `getPage` gives not found for the old address, like any page that has moved. Links and menu items that point at the trip follow the new address by themselves. Destinations keep their addresses, since they come from the country or continent.

## When Travel Orbit is down

The last answer is used for up to a minute and longer while Travel Orbit cannot be reached. An item Travel Orbit has never answered for gives not found, so builds never break.
