Skip to content

Get started as a developer

What you can build on Travel Orbit, where each API lives, how it decides who you are, and your first request.

Tutorial3 min read

Travel Orbit holds an organisation's trips, departures, prices and bookings. Your team runs them in the app; your website reads them and takes bookings through the APIs below. Payments go from the traveller's browser straight to the organisation's own Stripe account, never through your server or ours.

What you can build

Show trips, departures, guides and destinations with live prices and places
Use
The booking API (REST) or GraphQL
Price a booking as the traveller chooses
Use
POST/quote in the booking API, or the quote query in GraphQL
Take bookings on your own website
Use
POST/bookings in the booking API, with Stripe's Payment Element
Give travellers an account on your website
Use
The portal endpoints in the booking API
Preview draft trips on a staging site
Use
An API key that reads drafts, from your server
Let an AI assistant work with trips and bookings
Use
Try requests with your own data

If the website is built in CMS Orbit, editors can put trips on pages without code: see Show your trips on your website. The organisation's hosted booking pages at https://app.bifrostorbit.com/travel/book/{booking name} need no code either.

Addresses

Booking API
Address
https://app.bifrostorbit.com/travel/api/public/{booking name}
GraphQL
Address
https://app.bifrostorbit.com/travel/api/cdn/graphql
MCP server
Address
https://app.bifrostorbit.com/travel/mcp

The booking name is set under Booking settings, such as northwilds. It is the same name as in the hosted booking pages' address.

Who you are

  • Reading trips, departures, guides and destinations needs no key. It returns only what the booking pages show anyway.
  • Quotes and bookings need no key either. From a browser, only the websites listed under Allowed websites in Booking settings may call them; a call from your server, without an Origin header, always may.
  • API keys are optional. A key that starts with trv_pk_ counts your requests; one that starts with trv_sk_ also reads draft trips and works only from a server. Admins create them under API keys.
  • The MCP server signs in with OAuth as a person on the team, with that person's role.

Your first request

List Northwilds' trips in Norway, in Norwegian:

Shell
curl 'https://app.bifrostorbit.com/travel/api/public/northwilds/trips?country=NO&locale=nb'
JSON
{  "data": [    {      "id": "6650f1c2a9e4b3d2c1f0e9b1",      "slug": "lofoten-ridge-walk",      "name": "Eggevandring i Lofoten",      "currency": "EUR",      "priceFrom": 124000,      "nextDeparture": "2027-06-14",      "departures": [{ "id": "6650f1c2a9e4b3d2c1f0ea07", "startDate": "2027-06-14", "status": "open", "seatsLeft": 6 }],      "locale": "nb",      "fallback": []    }  ]}

The answer is shortened. Amounts are whole minor units: 124000 with EUR is €1,240.00.

The same in GraphQL, from a browser:

JavaScript
const response = await fetch("https://app.bifrostorbit.com/travel/api/cdn/graphql?organisation=northwilds", {  method: "POST",  headers: { "Content-Type": "application/json" },  body: JSON.stringify({ query: '{ trips(country: "NO", locale: "nb") { slug name priceFrom currency nextDeparture } }' }),});const { data } = await response.json();

From here

  1. Open API playground under Developers in the sidebar and run Trips with your own data.
  2. Read the booking API for every field, the booking flow and the traveller account.
  3. Add your website to Allowed websites before you call quotes or bookings from the browser.
  4. When something answers with an error, look it up in Troubleshooting.

Travel Orbit records what happens to trips, departures, bookings and payments as events in Orbit Exchange. It doesn't send webhooks to your own systems, and there is no Travel Orbit SDK: the APIs are plain HTTP and JSON.

Was this page helpful?

Read next