Introduction
The Kiosk API provides a complete set of endpoints for airline kiosk self-service functionality. This API enables passengers to search for their bookings, view seat maps, assign seats, check-in, and generate boarding passes through self-service kiosks.
Important: Each airline has their own specific domain. The API endpoints are hosted on airline-specific domains.
Base URL Pattern: https://{your-airline-domain}/api
Important: All API endpoints are prefixed with /api
due to the servlet context path configuration.
To get your airline’s specific API domain, contact your technical integration manager.
Airline Identification
The Kiosk API requires airline identification to provide airline-specific functionality. All requests must include the airline identifier in the request headers.
Required header: X-AIRLINE-ID
Input Validation
The API performs automatic validation on input parameters to ensure data quality and security:
-
Passenger Names (
lastName
): Only letters, spaces, hyphens, and apostrophes are allowed. Maximum length: 50 characters. -
Booking Numbers (
bookingNumber
): Only uppercase letters and digits are allowed. Length: 3-20 characters. -
Seat Numbers (
seatNumber
): Must follow the format of 1-3 digits followed by a single uppercase letter (e.g., "1A", "12B", "123C").
Invalid input will result in a 400 Bad Request
response with a descriptive error message.
Endpoints Summary
Method | Endpoint | Description |
---|---|---|
GET |
|
Search passengers by last name and booking number |
GET |
|
Get seatmap for passenger (adult/child or infant) |
POST |
|
Assign seat to passenger |
POST |
|
Check-in passenger |
GET |
|
Generate boarding pass for checked-in passenger |
API Endpoints
Passenger Search
Search for passengers by booking number and last name.
HTTP Request
GET /v1/kiosk/passenger/search?lastName={lastName}&bookingNumber={bookingNumber}
Request Parameters
Parameter | Type | Required | Description |
---|---|---|---|
|
String |
Yes |
Passenger’s last name (letters, spaces, hyphens, apostrophes only, max 50 chars) |
|
String |
Yes |
Booking reference number (uppercase letters and digits only, 3-20 chars) |
Response
{
"data": [
{
"airline": "AF",
"flightCode": "AF1234",
"flightStatus": "ON_TIME",
"departDate": "2025-08-27",
"departTime": "12:00",
"srcAirport": "LAX",
"dstAirport": "JFK",
"allowCheckIn": true,
"paxSegmentId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"passengerId": "b2c3d4e5-f6g7-8901-bcde-f12345678901",
"eticket": "1234567890",
"lastName": "DOE",
"firstName": "JOHN",
"gender": "MALE",
"documentInfo": {
"type": "PASSPORT",
"issueCountry": "US",
"idNumber": "123456789",
"nationality": "US",
"birthDate": "1990-01-01",
"expiryDate": "2025-12-25",
"surname": "DOE",
"firstName": "JOHN"
},
"bookings": [
{
"airline": "AF",
"bookingNumber": "ABC123"
}
],
"seat": "12A",
"paxType": "ADT",
"status": "ISSUED",
"cabinClass": "ECONOMY",
"bookingClass": "Y"
}
]
}
Response Fields
Field | Type | Description |
---|---|---|
|
String |
Airline code |
|
String |
Flight number/code |
|
Enum |
Current flight status: "ON_TIME", "CANCELED", "RESCHEDULED" |
|
LocalDate |
Departure date (ISO date format: YYYY-MM-DD) |
|
LocalTime |
Departure time (HH:mm format) |
|
String |
Source/origin airport code |
|
String |
Destination airport code |
|
Boolean |
Whether check-in is allowed for this passenger |
|
UUID |
Unique identifier for passenger segment |
|
UUID |
Unique identifier for passenger |
|
String |
Electronic ticket number (can be null) |
|
String |
Passenger’s last name |
|
String |
Passenger’s first name |
|
String |
Passenger’s gender (MALE, FEMALE, UNKNOWN) |
|
Object |
Passenger document information |
|
Array |
Booking reference information |
|
String or null |
Assigned seat number (null if no seat assigned) |
|
Enum |
Passenger type. Possible values: |
|
Enum |
Current passenger segment status. Possible values: |
|
Enum |
Cabin class. Possible values: |
|
String |
Booking class code |
|
Enum |
Document type. Possible values: |
|
String |
Country that issued the document |
|
String |
Document number |
|
String |
Passenger nationality |
|
Date or null |
Passenger birth date (null if not provided) |
|
Date or null |
Document expiry date (null if not provided) |
|
String |
Surname from document |
|
String |
First name from document |
|
String |
Airline code for this booking |
|
String |
Booking reference number |
Passenger Seatmap
Retrieve available seats for passenger seat assignment.
HTTP Request
GET /v1/kiosk/passenger/seatmap?paxSegmentId=a1b2c3d4-e5f6-7890-abcd-ef1234567890
Request Parameters
Parameter | Type | Description |
---|---|---|
|
UUID (required) |
Passenger segment identifier |
Response
The response format depends on the passenger type. The response uses a discriminator field type
to determine the structure:
Adult/Child Seatmap Response
{
"data": {
"type": "ADT",
"decks": [
{
"name": "Main Deck",
"parts": [
{
"classId": "ECONOMY",
"name": "Economy",
"config": [
{
"tag": "A",
"attrs": {}
}
],
"rows": [
{
"id": 1,
"slots": [
{
"id": "1A",
"attrs": {
"occupied": false,
"facilities": [
{
"facilityType": "EXIT",
"facilityPointer": "LEFT",
"description": "Emergency exit"
}
]
}
}
],
"attrs": {}
}
]
}
]
}
],
"seatsFree": 150,
"seatsOccupied": 30,
"seatsSelectable": 120
}
}
Infant Seatmap Response
{
"data": {
"type": "INF",
"decks": [
{
"name": "Main Deck",
"parts": [
{
"classId": "ECONOMY",
"name": "Economy",
"config": [
{
"tag": "A",
"attrs": {}
}
],
"rows": [
{
"id": 1,
"slots": [
{
"id": "1A",
"attrs": {
"selectable": true,
"pairedWithAdult": true,
"pairedAdultPaxId": "b2c3d4e5-f6a7-8901-bcde-fa2345678901",
"facilities": []
}
}
],
"attrs": {}
}
]
}
]
}
],
"seatsSelectable": 5
}
}
Response Fields
Field | Type | Description |
---|---|---|
|
String |
Response type: "ADT" (for both adults and children) or "INF" |
|
Array |
Aircraft deck configuration |
|
Integer |
Number of free seats (adult response only) |
|
Integer |
Number of occupied seats (adult response only) |
|
Integer |
Number of selectable seats |
|
String |
Deck name (e.g., "Main Deck") |
|
Array |
Cabin parts configuration |
|
Enum |
Cabin class: "FIRST_PREMIUM", "FIRST", "BUSINESS_PREMIUM", "BUSINESS", "ECONOMY_PREMIUM", "ECONOMY" |
|
String |
Cabin class name |
|
Array |
Column configuration |
|
Array |
Seat row configuration |
|
String |
Column identifier (e.g., "A", "B", "C") |
|
Object |
Column attributes |
|
Integer |
Row number |
|
Array |
Seat slots in this row |
|
Object |
Row attributes |
|
String |
Seat identifier (e.g., "1A") |
|
Object |
Seat attributes |
|
Boolean |
Whether the seat is occupied |
|
Boolean |
Whether seat can be selected (infant response only) |
|
Boolean |
Whether infant seat is paired with adult (infant response only) |
|
UUID |
Adult passenger segment ID (infant response only) |
|
Array |
List of seat facilities and amenities |
|
Enum |
Facility type: "GAP", "REST_ROOM", "EMPTY_PLACE", "EXIT", "EMERGENCY_EXIT" |
|
Enum |
Facility position: "LEFT", "RIGHT", "BEFORE", "AFTER", "LEFT_BEFORE", "LEFT_AFTER", "RIGHT_BEFORE", "RIGHT_AFTER" |
|
String |
Facility description |
Seat Assignment
Assign a seat to a passenger.
HTTP Request
POST /v1/kiosk/passenger/seat-assign
Request Body
{
"paxSegmentId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"seatNumber": "12A"
}
Request Fields
Field | Type | Required | Description |
---|---|---|---|
|
UUID |
Yes |
Passenger segment identifier |
|
String |
Yes |
Seat number to assign (format: 1-3 digits + letter, e.g., "12A") |
Response
{
"paxSegmentId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
Response Fields
Field | Type | Description |
---|---|---|
|
UUID |
Passenger segment identifier |
Passenger Check-in
Check-in a passenger for their flight.
HTTP Request
POST /v1/kiosk/passenger/checkin
Request Body
{
"paxSegmentId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
Request Fields
Field | Type | Required | Description |
---|---|---|---|
|
UUID |
Yes |
Passenger segment identifier |
Response
{
"paxSegmentId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
Response Fields
Field | Type | Description |
---|---|---|
|
UUID |
Passenger segment identifier |
Boarding Pass
Generate a boarding pass for a checked-in passenger.
HTTP Request
GET /v1/kiosk/passenger/boarding-pass?paxSegmentId={paxSegmentId}
Request Parameters
Parameter | Type | Required | Description |
---|---|---|---|
|
UUID |
Yes |
Passenger segment identifier |
Response
{
"data": {
"paxSegmentId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"flightId": "f1e2d3c4-b5a6-9807-bcde-ef9876543210",
"boardingPassData": "M1JOHNSON/JOHN E123456 LAXJFKAF 1234 123Y018A0025 100",
"format": "AEA"
}
}
Response Fields
Field | Type | Description |
---|---|---|
|
UUID |
Passenger segment identifier |
|
UUID |
Flight identifier |
|
String |
Boarding pass barcode data in AEA format (contains only the barcode string, not print commands) |
|
Enum |
Boarding pass format. Possible values: |
Business Rules
Seat Assignment Rules
Adult Passengers
-
Can be assigned to any available seat in their cabin class
-
Seat assignment is optional before check-in
-
Seat assignment becomes mandatory during check-in
Child Passengers
-
Follow the same rules as adult passengers
-
May have restricted seating based on airline policy
Infant Passengers
-
Must be assigned to the same seat as an accompanying adult from the same booking
-
Cannot be assigned to adjacent seats
-
Only one infant per adult seat is allowed
-
If no suitable adult seat is available, infant seatmap returns empty
Check-in Rules
-
Passengers must have a valid booking in ISSUED status
-
Seat assignment is required for check-in
-
Online check-in window must be open for the flight
-
Passengers cannot check-in if the flight is already departed or cancelled
Boarding Pass Rules
-
Only available for passengers in CHECKED_IN status
-
Boarding pass contains all necessary flight and passenger information
-
Generated in AEA format by default
-
Returns only the barcode data, not printer commands
-
Barcode data can be used for boarding verification
Error Handling
The Kiosk API uses standard HTTP response codes and returns detailed error information:
HTTP Status Codes
Code | Description |
---|---|
200 |
Success |
400 |
Bad Request - Invalid request parameters |
401 |
Unauthorized - Invalid or missing airline ID |
404 |
Not Found - Passenger or booking not found |
409 |
Conflict - Business rule violation (e.g., seat already occupied) |
500 |
Internal Server Error |
Error Response Format
{
"error": {
"code": "ERROR_CODE",
"message": "Human-readable error message",
"details": "Additional error details"
}
}
Common Error Codes
Error Code | Description |
---|---|
|
No passenger found with provided booking details |
|
Requested seat is not available for assignment |
|
Check-in is not permitted for this passenger |
|
Boarding pass cannot be generated (passenger not checked-in) |
|
Invalid passenger type for requested operation |
|
Seat must be assigned before check-in |
Integration Notes
Infant Seat Assignment
When handling infant passengers, the API enforces strict business rules:
-
Infants can only occupy the same seat as an adult from the same booking
-
The API automatically filters available seats to show only those occupied by adults from the same booking
-
If an adult seat is already occupied by another infant, it will not be available
-
The seatmap response for infants includes
pairedAdultPaxId
to identify the accompanying adult
State Transitions
Passenger segments follow this state flow:
CREATED → [payment] → ISSUED → [seat assignment] → ISSUED → [check-in] → CHECKED_IN → [boarding] → BOARDED → [flight completion] → FLOWN
Additional states include: * CANCELLED - Flight or booking cancelled * NO_SHOW - Passenger didn’t board * REFUNDING/REFUNDED - Booking refunded * CHANGING/CHANGED - Booking changed * TRANSFERRING/TRANSFERRED - Booking transferred
Idempotency
All POST operations are idempotent where applicable: * Seat assignment to the same seat returns success * Check-in of already checked-in passenger returns success * Multiple boarding pass requests return the same boarding pass
Technical Implementation
Data Types
-
All UUIDs are in standard UUID format (e.g.,
123e4567-e89b-12d3-a456-426614174000
) -
Dates follow ISO 8601 format (
YYYY-MM-DD
) -
DateTimes follow ISO 8601 format with time (
YYYY-MM-DDTHH:mm:ss
) -
Enums are case-sensitive strings in UPPER_CASE
-
Boarding pass data is returned as raw string format
Response Structure
Response structures vary by endpoint:
* Search, seatmap, and boarding pass endpoints wrap responses in KioskResponse<T>
with a data
field
* Check-in and seat assignment endpoints return KioskSuccessResponse
directly
Polymorphic Responses
The seatmap endpoint returns different response structures based on passenger type using a discriminator field type
:
* type: "ADT"
returns AdultSeatmapResponse
with full deck configuration (used for both ADT and CHD passenger types)
* type: "INF"
returns InfantSeatmapResponse
with available adult seats for infant assignment
Error Handling
The API returns structured error responses with localized messages and specific error codes for common business rule violations.