Skip to main content

Implementing Semantic Boarding Passes

Upgrade passenger experiences with iOS 26 semantic boarding passes

Nick Murray avatar
Written by Nick Murray
Updated this week

Note: As of the date of publication, iOS26 is still a developer beta release. Content below may change between now and the public release.

Introduction

iOS 26 brings the first major update to flight boarding passes since their initial release in iOS 6. Apple are seeking to enhance the passenger experience with a range of new features, including:

  • a new standardized layout, providing passengers with a consistent experience across all airlines,

  • integration with Apple's flight service to automatically stay up to date,

  • live activities that provide easy access to key flight information that can be shared with friends and family,

  • leveraging SSR code, passenger privilege, and security program data to display badges on the pass surface to efficiently communicate information about passenger requirements and service entitlements,

  • a new Airline Services tab providing passengers a way to easily manage their booking, purchase add-on services, and get relevant information about services available throughout their journey,

  • integration with maps and find me for airport directions and tracking luggage with Apple's Find My service.

These new enhancements utilize Semantic Tags in the Apple Pass Bundle to be able to provide the upgraded pass to iOS 26 users, whilst allowing backward compatibility with passengers using devices running iOS 18 or below.

PassKit takes care of populating the majority of these tags to enable compatibility automatically. However, there have been a few enhancements to the PassKit API to provide the additional information required to fully benefit from the new pass format.

This article will introduce the mandatory and optional changes that you can make to your API calls and PassKit objects to enable these features for your passengers and operations.

Mandatory Items:

We've tried to simplify upgrading to the new format as much as possible, and there are just 2 changes that you need to make to your templates.\

Firstly, in the appleWalletSettings object, we have added a new boolean parameter semanticBoardingPass. Set this to true and Wallet will automatically render the pass in the new format.

For Wallet to render the pass in the new format, the following minimum information must be supplied:

  • carrier.iataCarrierCode

  • flight.flightNumber

  • flight.scheduledDepartureTime

  • flight.scheduledArrivalTime

  • flight.boardingTime

  • port.iataAirportCode (for departure and arrival ports)

  • port.cityName (for departure and arrival ports)

  • port.timezone (for departure and arrival ports)

If any of the above data is not available, then Wallet will fallback to the original layout.

Whilst not mandatory, semantic boarding passes use a new logo image type primaryLogo. This logo is slightly smaller than the appleLogo, and needs to have a height of 90 pixels and a width of up to 378 pixels. If no primaryLogo is supplied, we will do our best to downscale your appleLogo which should still be provided for backward compatibility with passengers not using iOS 26.

Optional Items:

Certain passenger capabilities allow for badges to be displayed on the face of the pass. You can pass an array of PassengerCapabilities to the capabilities field on the boarding pass object.

Enum: PassengerCapabilities

Name

Number

Description

NO_CAPABILITIES

0

Passenger has no capabilities, or capabilities are unknown.

PRE_BOARDING

1

Passenger is entitled to pre-board the airplane

PRIORITY_BOARDING

2

Passenger is entitled to priority boarding

CARRY_ON

3

Passenger may bring carry-on baggage on board

PERSONAL_ITEM

4

Passenger may bring a personal item (e.g. purse, laptop bag, etc.) on board

The new format allows for badges or icons to be displayed for eligible security pathways supported at each airport. As well as the US-Centric programs of TSA PreCheck®, Global Entry, and CLEAR., badges can be presented for passengers qualifying for One Stop Security, Transit Without Visa, International to Domestic, and International to International.

To display a badge on the pass, both the Airport and the Passenger need to be members of the program.

We have created added a field securityPrograms to both the Airport and BoardingPass objects which accepts an array of AirportSecurityPrograms:

Enum: AirportSecurityPrograms

Name

Number

Description

NO_SECURITY_PROGRAMS

0

Default, no programs available, or programs are unknown

TSA_PRE_CHECK

1

TSA PreCheck®

TSA_PRE_CHECK_TOUCHLESS_ID

2

TSA PreCheck® Touchless ID

TWOV

3

Transit Without Visa

OSS

4

One Stop Security

ITI

5

International to International

ITD

6

International to Domestic

GLOBAL_ENTRY

7

Global Entry

CLEAR

8

CLEAR+

​For international travel, there is an option to display a badge confirming that passenger documentation (passport / visa / etc.) has been checked. The text and localized text for this badge can be set by the carrier and sits against the Airport object.

We have also added a loungeId paramater, that if present will display a map with a link to the Apple Place ID of the airport lounge in the Airline Services section of the tag. You can use the most appropriate lounge id for the majority of passengers, or omit it and provide individually at the boarding pass level with an additional data items with a key of airport.loungeId.

Field

Type

Description

documentsVerifiedText

string

A localizable value to show whe a passenger's international documents have been verified. Examples include "Docs OK", or "TravelReady". If the boarding pass conditionalItems -> InternationalDocVerification is COMPLETED, this value will show on the face of the pass.

localizedDocumentsVerifiedText

io.LocalizedString

The localized documents verified text.

loungeId

string

Apple Place ID for Airline lounge. Can be overridden at the boarding pass level by providing additional data items airport.loungeId.

FlightURLs:

Flight URLs enhance the passenger experience by allowing them to engage with their booking information and to access upgrades and services for their journey. Urls can be provided in the urls field of the flight designator, flight, or boarding pass level, with each level overriding the parent level.

As an example, there may be URLs to purchase lounge access or additional baggage that would apply to the majority of passengers. If a passenger has already purchased these services, it may be better to present URLs that do not contain the lounge access or additional baggage URLs to avoid confusion.

URls can be web links or deep links to your app. Wherever possible they should be as deep as possible.

Message: FlightURLS

Field

Type

Description

upgradeURL

string

A link to upgrade the flight.

orderFoodURL

string

A link to order food, either before or during the flight.

purchaseWifiURL

string

A link to purchase in-flight wifi.

changeSeatURL

string

A link to change the seat for this ticket.

entertainmentURL

string

A link to in-flight entertainment.

purchaseAdditionalBaggageURL

string

A link to add checked bags for this ticket.

purchaseLoungeAccessURL

string

A link to purchase lounge access.

baggagePolicyURL

string

A link to the baggage policy.

reportLostBagURL

string

A link to report lost luggage.

managementURL

string

A link for managing the booking.

accessibilityURL

string

A link for passengers requiring assistance.

requestWheelchairURL

string

A link to request a wheel chair.

registerServiceAnimalURL

string

A link for registering a service animal.

transitProviderEmail

string

The email for the transit provider.

transitProviderWebsiteURL

string

A link for the transit provider.

transitProviderPhoneNumber

string

A phone number for the transit provider.

Infants:

With semantic boarding passes, SSR codes, Passenger Capabilities, and Airport Security Programs play a significant role in exposing badges on the front of the pass. With this in mind, we have extended the Infant object to accept independent arrays of these items using the parameters ssrCodes, capabilities, and securityPrograms. The SSR code INFT will be added automatically if no ssrCodes are provided.


You can find the full documentation for the PassKit Flights API here.

Did this answer your question?