Last updated:
03-Aug-2026
Recent changes:
Merge branch 'feature/NSK-76937' into 'master'
update api product values
Closes NSK-76937
See merge request api-program/apigee/flight/newskies-apis/boardingpass!124
Code Examples
Authentication
Obtain an OAuth 2.0 access token using client credentials:
curl -X POST "https://oauth.api.tui/oauth/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET"
cURL
Get Boarding Passes
curl -X POST "https://test.api.tui/flight-newskies-boardingpass/bookings/ABC123/boardingpasses?lastname=Smith&outboundDate=20260815" \
-H "Authorization: Bearer <access_token>" \
-H "X-SourceMarket: uk"
Check Availability
curl -X GET "https://test.api.tui/flight-newskies-boardingpass/settings/availability/LGW/PMI/BY/20260815" \
-H "Authorization: Bearer <access_token>" \
-H "X-SourceMarket: uk"
Get Check-in Status
curl -X GET "https://test.api.tui/flight-newskies-boardingpass/bookings/ABC123/checkinstatus?segment=0" \
-H "Authorization: Bearer <access_token>" \
-H "X-SourceMarket: uk"
Generate PDF Boarding Pass
curl -X POST "https://test.api.tui/flight-newskies-boardingpass/bookings/ABC123/pdf?lastname=Smith&outboundDate=20260815&paxNo=0" \
-H "Authorization: Bearer <access_token>" \
-H "X-SourceMarket: uk" \
--output boarding-pass.pdf
Generate Apple Wallet Pass
curl -X POST "https://test.api.tui/flight-newskies-boardingpass/bookings/ABC123/pkpass?lastname=Smith&outboundDate=20260815&segment=0&paxNo=0" \
-H "Authorization: Bearer <access_token>" \
-H "X-SourceMarket: uk" \
--output boarding-pass.pkpass
Email Boarding Pass
curl -X POST "https://test.api.tui/flight-newskies-boardingpass/bookings/ABC123/email?lastname=Smith&outboundDate=20260815&recipient=passenger@example.com&attach=pdf" \
-H "Authorization: Bearer <access_token>" \
-H "X-SourceMarket: de"
Get Check-in Config
curl -X GET "https://test.api.tui/flight-newskies-boardingpass/settings/checkinconfig/BY?departureStation=LGW&arrivalStation=PMI" \
-H "Authorization: Bearer <access_token>" \
-H "X-SourceMarket: uk"
JavaScript / Node.js (Fetch)
const BASE_URL = 'https://test.api.tui/flight-newskies-boardingpass';
async function getBoardingPasses(bookingId, lastname, outboundDate, sourceMarket) {
const params = new URLSearchParams({ lastname, outboundDate });
const response = await fetch(
`${BASE_URL}/bookings/${bookingId}/boardingpasses?${params}`,
{
method: 'POST',
headers: {
'Authorization': `Bearer ${accessToken}`,
'X-SourceMarket': sourceMarket,
},
}
);
if (!response.ok) throw new Error(`HTTP ${response.status}`);
return response.json();
}
async function checkAvailability(origin, destination, airline, date) {
const response = await fetch(
`${BASE_URL}/settings/availability/${origin}/${destination}/${airline}/${date}`,
{ headers: { 'Authorization': `Bearer ${accessToken}`, 'X-SourceMarket': 'uk' } }
);
return response.json();
}
C# / .NET
using System.Net.Http;
using System.Net.Http.Headers;
public class BoardingPassApiClient
{
private readonly HttpClient _httpClient;
public BoardingPassApiClient(string baseUrl, string accessToken, string sourceMarket)
{
_httpClient = new HttpClient { BaseAddress = new Uri(baseUrl) };
_httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", accessToken);
_httpClient.DefaultRequestHeaders.Add("X-SourceMarket", sourceMarket);
}
public async Task<string> GetCheckInStatusAsync(string bookingId)
{
var response = await _httpClient.GetAsync($"bookings/{bookingId}/checkinstatus");
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync();
}
public async Task<byte[]> GeneratePdfAsync(string bookingId, string lastname, string outboundDate)
{
var response = await _httpClient.PostAsync(
$"bookings/{bookingId}/pdf?lastname={lastname}&outboundDate={outboundDate}", null);
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsByteArrayAsync();
}
}
Python
import requests
class BoardingPassClient:
def __init__(self, base_url, access_token, source_market):
self.base_url = base_url
self.session = requests.Session()
self.session.headers.update({
"Authorization": f"Bearer {access_token}",
"X-SourceMarket": source_market,
})
def get_boarding_passes(self, booking_id, lastname, outbound_date):
response = self.session.post(
f"{self.base_url}/bookings/{booking_id}/boardingpasses",
params={"lastname": lastname, "outboundDate": outbound_date},
)
response.raise_for_status()
return response.json()
def check_availability(self, origin, destination, airline, date):
response = self.session.get(
f"{self.base_url}/settings/availability/{origin}/{destination}/{airline}/{date}"
)
response.raise_for_status()
return response.json()
def download_pdf(self, booking_id, lastname, outbound_date):
response = self.session.post(
f"{self.base_url}/bookings/{booking_id}/pdf",
params={"lastname": lastname, "outboundDate": outbound_date},
)
response.raise_for_status()
return response.content
Error Handling with Retry
async function callWithRetry(fn, maxRetries = 3) {
for (let attempt = 1; attempt <= maxRetries; attempt++) {
try {
return await fn();
} catch (error) {
if (attempt === maxRetries) throw error;
if (error.status === 429 || error.status >= 500) {
await new Promise(r => setTimeout(r, Math.pow(2, attempt) * 1000));
} else {
throw error;
}
}
}
}