Skyloom Travel — Partner API v1

Partner Integration Guide — search, book and ticket flights end-to-end

Base URL https://skyloomtravel.uk/api/v1/  ·  Version: v1 (live)  ·  Updated 2026-06-30  ·  Support support@skyloomtravel.uk

1. Overview

The Skyloom Travel Partner API v1 is a REST/JSON API that lets you search, book and ticket flights end-to-end on your own site. You search for flights, create the booking, and receive the PNR and ticket number — all over the API. There is no redirect to skyloomtravel.uk; your travellers stay on your own website throughout. Bookings are paid from your prepaid balance with Skyloom.

End-to-end flow

Search   --> POST /v1/flights/search          --> offers, each with an offer_id (valid 30 min)
Book     --> POST /v1/flights/book            --> booking_ref_no + pnr (+ ticket_number)
Status   --> GET  /v1/flights/booking/{ref}   --> poll until ticket_number appears
  1. Search for flights and read back a list of offers.
  2. Take an offer_id from an offer (valid for 30 minutes).
  3. Book with that offer_id plus your passenger details.
  4. Poll the booking until the ticket_number appears.

What you build

You present search results, collect passenger and contact details, and confirm the booking on your own site. Each booking is paid from your prepaid balance with Skyloom, so there is no per-transaction card handling on your side.

Conventions

  • Base URL: https://skyloomtravel.uk/api/v1/
  • Auth: Authorization: Bearer <YOUR_API_KEY> header (see below).
  • Request body: application/x-www-form-urlencoded.
  • Responses: JSON, wrapped in a standard envelope (see Errors).

2. Authentication

Every request is authenticated with a Bearer token sent in the Authorization header:

Authorization: Bearer YOUR_API_KEY
  • The key is only accepted in the Authorization header. It is never sent in the URL or in the request body.
  • Your key is delivered once, out of band, via a one-time secret link. Store it securely — it is shown only once and cannot be retrieved again.
  • An optional IP allow-list can be configured for your account on request, so the key is only valid from your servers.

Verify your key first

Call POST /v1/ping to confirm your key works and to see your account capabilities before integrating the search and booking calls.

3. Endpoints

All endpoints require the Authorization: Bearer header.

MethodPathPurposeAuth
POST/v1/pingVerify your key and capabilitiesBearer
POST/v1/flights/searchSearch flights, return offersBearer
POST/v1/flights/bookBook an offer end-to-endBearer
GET/v1/flights/booking/{booking_ref_no}Read / poll a booking's statusBearer

4. Ping — verify your key

POST /v1/ping confirms your key is valid and returns your account capabilities. Use it as a connectivity and credential check.

curl -X POST https://skyloomtravel.uk/api/v1/ping \
  -H "Authorization: Bearer $KEY"
{
  "status": true,
  "message": "pong",
  "data": { "partner": "Your Company", "partner_id": 2, "can_book": true }
}

6. Book

POST /v1/flights/book creates a booking from an offer_id you received from search. The price is re-validated server-side, and the booking is paid from your prepaid balance with Skyloom.

Request parameters

FieldRequiredNotes
offer_idyesFrom a recent search (≤ 30 min old, not already used).
passengersyesJSON array of passenger objects (see below). At least one adult.
contact_emailrecommendedBooking contact email.
contact_phonerecommendedBooking contact phone.
issue_ticketno1 (default) issues the ticket now; 0 confirms the booking + PNR and holds it without ticketing.

Passenger object

FieldExampleNotes
typeadultadult, child or infant
titleMre.g. Mr / Mrs / Ms
first_nameJohnas in passport
last_nameDoeas in passport
dob1990-05-20date of birth, YYYY-MM-DD
genderMM or F
nationalityGBISO country code
passport_number123456789travel document number
passport_expiry2031-01-01YYYY-MM-DD

Example request

curl -X POST https://skyloomtravel.uk/api/v1/flights/book \
  -H "Authorization: Bearer $KEY" \
  --data-urlencode "offer_id=OFR-46d2eadfb2-IST-ASB" \
  --data-urlencode "contact_email=ops@partner.com" \
  --data-urlencode "contact_phone=+441234567890" \
  --data-urlencode "issue_ticket=1" \
  --data-urlencode 'passengers=[{"type":"adult","title":"Mr","first_name":"John","last_name":"Doe","dob":"1990-05-20","gender":"M","nationality":"GB","passport_number":"123456789","passport_expiry":"2031-01-01"}]'

Example response

{
  "status": true,
  "message": "Ticket issued",
  "data": {
    "booking_ref_no": "1718999999",
    "pnr": "ABC123",
    "ticket_number": "2351234567890",
    "status": "ticketed",
    "total": 409.20,
    "currency": "USD"
  }
}
  • status: "ticketed" — the ticket has been issued and ticket_number is in the response.
  • status: "ticketing_pending" — the booking and PNR are confirmed and the ticket is being issued; ticket_number is null for now. Poll GET /v1/flights/booking/{booking_ref_no} until it appears.
  • status: "held" — returned when issue_ticket=0: the booking and PNR exist but no ticket has been issued.

Insufficient balance

If your prepaid balance cannot cover the booking, the call returns 402 INSUFFICIENT_DEPOSIT and no booking is made. Top up your balance with Skyloom and retry.

7. Booking status

GET /v1/flights/booking/{booking_ref_no} reads one of your bookings. Use it to poll until the ticket_number appears — the ticket is issued automatically at booking time, or shortly after by Skyloom.

curl -H "Authorization: Bearer $KEY" \
  https://skyloomtravel.uk/api/v1/flights/booking/1718999999
{
  "status": true,
  "message": "OK",
  "data": {
    "booking_ref_no": "1718999999",
    "pnr": "ABC123",
    "ticket_number": "2351234567890",
    "status": "ticketed",
    "total": 409.20,
    "currency": "USD",
    "booked_at": "2026-06-24"
  }
}

Status values

StatusMeaning
ticketedTicket issued; ticket_number is present.
ticketing_pendingPNR confirmed; the ticket is on the way. Keep polling.
cancelledThe booking has been cancelled.

You can only read your own bookings; an unknown reference returns INVALID_PARAMS.

8. Errors

Successful responses use the envelope { "status": true, "message": "OK", "data": { ... } }. Errors use:

{
  "status": false,
  "error": { "code": "INVALID_PARAMS", "message": "human readable" }
}

Error codes

CodeHTTPMeaning
AUTH_MISSING_KEY401No Authorization: Bearer header.
AUTH_INVALID_KEY401Unknown or disabled key, or IP not allowed.
INVALID_PARAMS400Missing/invalid parameter, or unknown/used offer_id.
NO_RESULTS200Valid search, but no flights found.
OFFER_EXPIRED410The offer is older than its 30-minute validity window — search again.
INSUFFICIENT_DEPOSIT402Your prepaid balance is too low for this booking.
RATE_LIMIT429Too many requests; see Rate limiting. Includes a Retry-After header.
SUPPLIER_TIMEOUT504Upstream timed out — retry.
SUPPLIER_ERROR502Upstream error.

9. Rate limiting

The default limit is 300 requests per minute per key (sliding minute window). When you exceed it, the API responds with HTTP 429 and code RATE_LIMIT, including a Retry-After header (seconds) indicating when to retry.

10. Downloads

Machine-readable artifacts for the v1 contract:

In Postman, choose Import → Link and paste the collection URL. Open the collection's Variables tab and set the api_key variable to the key Skyloom issued you, then run Ping → Search → Book → Booking status. The OpenAPI spec can be imported into Postman, Swagger or Stoplight, or used to generate a client.