APIs to perform search, checkout and book an air pnr
API reference
/Air
/- Validate air itinerary
Get air itineraries
Get flight attributes
Get selected itinerary
Get Airlines Information (Air)
Get flight checkout details
Get flight seat map
Initiate booking
Validate air itinerary (interim)
Create air pnr
Cancel Air Pnr
Get PNR exchange details
Modify Search
Modify Book
Edit PNR
Get Special Service Requests (SSR)
Get Special Service Requests (SSR) for a Category
Returns the Air Raw Fare Rules for a Segment or Pnr
Get unused credits for a traveler
Get unused credits for a company
Get transferable unused credits for a company
Migrate Unused Credits of a traveler to and fro Company Credits
Validate air itinerary
Air API (v2)
Download OpenAPI description
Languages
Servers
Sandbox URL
https://api-ext-sboxmeta.partners.spotnana.com/
Spotnana mock server
https://developer.spotnana.com/_mock/openapi/airapi/
Request
Initiates a new air booking for the trip. The identityDocs field supports the following traveler identity documents: Passport, National ID, Known Traveler Number (KTN), redress number, and immigration documents. The traveler can choose one among the list of identity documents available and provide its information during checkout.
Security
Bearer
- Sandbox URLhttps://api-ext-sboxmeta.partners.spotnana.com/v2/air/initiate-booking
- Spotnana mock serverhttps://developer.spotnana.com/_mock/openapi/airapi/v2/air/initiate-booking
- curl
- JavaScript
- Node.js
- Python
curl -i -X POST \
https://api-ext-sboxmeta.partners.spotnana.com/v2/air/initiate-booking \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"initiateBookingWorkflowIds": {
"checkoutResponseId": "string",
"seatMapResponseId": "string"
},
"travelers": [
{
"travelerDetails": {
"travelerId": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
},
"travelerInfo": {
"userId": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
},
"travelerType": "ADULT",
"title": "MR",
"name": {
"family1": "Gandas",
"family2": "FamilyTwo",
"given": "Vichitr",
"middle": "Kumar",
"suffix": "SR",
"preferred": "Don"
},
"gender": "FEMALE",
"dob": {
"iso8601": "2017-07-21"
},
"phoneNumber": {
"countryCode": 91,
"countryCodeSource": "FROM_NUMBER_WITH_PLUS_SIGN",
"extension": "222",
"isoCountryCode": "IN",
"italianLeadingZero": true,
"nationalNumber": 8150,
"numberOfLeadingZeros": 1,
"preferredDomesticCarrierCode": "7",
"rawInput": "77777",
"type": "MOBILE"
},
"email": "example@email.com",
"identityDocs": [
{
"passport": {
"docId": "PassportID",
"expiryDate": {},
"issueCountry": "IN",
"issuedDate": {},
"nationalityCountry": "IN",
"type": "REGULAR"
}
}
],
"address": {
"addressLines": [
"Golden Gate Bridge"
],
"administrativeArea": "CA",
"administrativeAreaName": "California",
"description": "San Francisco Home",
"isDefault": true,
"languageCode": "en",
"locality": "San Francisco",
"locationCode": "LAX",
"organization": "Spotnana",
"postalCode": "94130",
"continentCode": "AF",
"recipients": [
"string"
],
"regionCode": "US",
"regionName": "America",
"revision": 1,
"sortingCode": "Jamaica",
"sublocality": "string",
"timezone": "America/Los_Angeles",
"coordinates": {
"latitude": 77.1025,
"longitude": 28.7041
}
},
"emergencyContactInfo": {
"address": {
"addressLines": [
"Golden Gate Bridge"
],
"administrativeArea": "CA",
"administrativeAreaName": "California",
"description": "San Francisco Home",
"isDefault": true,
"languageCode": "en",
"locality": "San Francisco",
"locationCode": "LAX",
"organization": "Spotnana",
"postalCode": "94130",
"continentCode": "AF",
"recipients": [
"string"
],
"regionCode": "US",
"regionName": "America",
"revision": 1,
"sortingCode": "Jamaica",
"sublocality": "string",
"timezone": "America/Los_Angeles",
"coordinates": {
"latitude": 77.1025,
"longitude": 28.7041
}
},
"designation": "MANAGER",
"email": "emergency-contact@email.com",
"name": {
"family1": "Gandas",
"family2": "FamilyTwo",
"given": "Vichitr",
"middle": "Kumar",
"suffix": "SR",
"preferred": "Don"
},
"phoneNumber": {
"countryCode": 91,
"countryCodeSource": "FROM_NUMBER_WITH_PLUS_SIGN",
"extension": "222",
"isoCountryCode": "IN",
"italianLeadingZero": true,
"nationalNumber": 8150,
"numberOfLeadingZeros": 1,
"preferredDomesticCarrierCode": "7",
"rawInput": "77777",
"type": "MOBILE"
},
"userOrgId": {
"organizationAgencyId": {
"id": "string"
},
"organizationId": {
"id": "string"
},
"userId": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
},
"tmcInfo": {
"id": {},
"primaryServiceProviderTmc": {},
"secondaryServiceProviderTmcs": [
null
],
"partnerTmcId": {}
},
"tmcBasicInfo": {
"contractingTmc": {},
"bookingTmc": {}
}
}
},
"loyaltyInfos": [
{
"appliedTo": [
"TAJ"
],
"id": "firstId",
"issuedBy": "firstIssuedBy",
"type": "AIR",
"linked": false
}
],
"emergencyContact": {
"name": "John Smith",
"email": "emergency-contact@email.com",
"designation": "MANAGER",
"relation": "SPOUSE",
"phoneNumbers": [
{
"countryCode": 91,
"countryCodeSource": "FROM_NUMBER_WITH_PLUS_SIGN",
"extension": "222",
"isoCountryCode": "IN",
"italianLeadingZero": true,
"nationalNumber": 8150,
"numberOfLeadingZeros": 1,
"preferredDomesticCarrierCode": "7",
"rawInput": "77777",
"type": "MOBILE"
}
],
"preferredLanguage": "en-US"
}
},
"seats": [
{
"flightId": "string",
"seatNumbers": [
"string"
]
}
],
"baggages": [
{
"legId": "string",
"baggageIds": [
"string"
]
}
],
"ancillaries": [
{
"ancillaryId": "ancillary_0"
}
],
"shareContactInfo": false,
"specialServiceRequests": [
{
"indexes": {
"legIndex": 1,
"flightIndex": 2
},
"flightIndex": 0,
"code": "WCHC",
"info": "Special meal without egg."
}
]
}
],
"bookingCharges": [
{
"amount": {
"base": {
"amount": 510,
"currencyCode": "GBP",
"convertedAmount": 715.42,
"convertedCurrency": "USD",
"otherCoinage": [
{
"coinageCode": "BREX_POINTS",
"amount": 1000,
"conversionRate": 0.01,
"preferredCurrencyConversionRate": 0.01
}
]
},
"tax": {
"amount": 510,
"currencyCode": "GBP",
"convertedAmount": 715.42,
"convertedCurrency": "USD",
"otherCoinage": [
{
"coinageCode": "BREX_POINTS",
"amount": 1000,
"conversionRate": 0.01,
"preferredCurrencyConversionRate": 0.01
}
]
},
"taxBreakdown": [
{
"amount": {
"amount": 510,
"currencyCode": "GBP",
"convertedAmount": 715.42,
"convertedCurrency": "USD",
"otherCoinage": [
{}
]
},
"taxCode": "VAT",
"percentage": 9
}
]
},
"paymentMethod": {
"selectedPaymentSource": {
"paymentSourceId": "f49d00fe-1eda-4304-ba79-a980f565281d",
"rawPaymentSource": {
"type": "string",
"cardDetails": {
"company": "VISA",
"token": "4111111111111111",
"expiry": {}
}
},
"postPaymentRedirectionUrl": "https://mycompany.com/checkout?paymentSourceId=f49d00fe-1eda-4304-ba79-a980f565281d",
"cvv": "string",
"amount": {
"amount": 510,
"currencyCode": "GBP",
"convertedAmount": 715.42,
"convertedCurrency": "USD",
"otherCoinage": [
{}
]
}
}
}
}
],
"bookingContact": {
"emailAddress": "mail@mail.com",
"phoneNumber": {
"countryCode": 91,
"countryCodeSource": "FROM_NUMBER_WITH_PLUS_SIGN",
"extension": "222",
"isoCountryCode": "IN",
"italianLeadingZero": true,
"nationalNumber": 8150,
"numberOfLeadingZeros": 1,
"preferredDomesticCarrierCode": "7",
"rawInput": "77777",
"type": "MOBILE"
}
},
"useExistingBooking": true
}'Response
application/json
{ "initiateBookingResponseId": "CuwDQ2hCa09HVTJZemsyWVRFNFlUUm", "paymentSourcePrePaymentInformation": [ { … } ] }
- Sandbox URLhttps://api-ext-sboxmeta.partners.spotnana.com/v2/air/revalidate-itinerary
- Spotnana mock serverhttps://developer.spotnana.com/_mock/openapi/airapi/v2/air/revalidate-itinerary
- curl
- JavaScript
- Node.js
- Python
curl -i -X POST \
https://api-ext-sboxmeta.partners.spotnana.com/v2/air/revalidate-itinerary \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"workflowIds": {
"checkoutResponseId": "string",
"seatMapResponseId": "string",
"paymentSetupResponseId": "string",
"initiateBookingId": "string"
},
"tripId": {
"id": "2783425534"
},
"travelers": [
{
"travelerDetails": {
"travelerId": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
},
"travelerInfo": {
"userId": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
},
"travelerType": "ADULT",
"title": "MR",
"name": {
"family1": "Gandas",
"family2": "FamilyTwo",
"given": "Vichitr",
"middle": "Kumar",
"suffix": "SR",
"preferred": "Don"
},
"gender": "FEMALE",
"dob": {
"iso8601": "2017-07-21"
},
"phoneNumber": {
"countryCode": 91,
"countryCodeSource": "FROM_NUMBER_WITH_PLUS_SIGN",
"extension": "222",
"isoCountryCode": "IN",
"italianLeadingZero": true,
"nationalNumber": 8150,
"numberOfLeadingZeros": 1,
"preferredDomesticCarrierCode": "7",
"rawInput": "77777",
"type": "MOBILE"
},
"email": "example@email.com",
"identityDocs": [
{
"passport": {
"docId": "PassportID",
"expiryDate": {},
"issueCountry": "IN",
"issuedDate": {},
"nationalityCountry": "IN",
"type": "REGULAR"
}
}
],
"address": {
"addressLines": [
"Golden Gate Bridge"
],
"administrativeArea": "CA",
"administrativeAreaName": "California",
"description": "San Francisco Home",
"isDefault": true,
"languageCode": "en",
"locality": "San Francisco",
"locationCode": "LAX",
"organization": "Spotnana",
"postalCode": "94130",
"continentCode": "AF",
"recipients": [
"string"
],
"regionCode": "US",
"regionName": "America",
"revision": 1,
"sortingCode": "Jamaica",
"sublocality": "string",
"timezone": "America/Los_Angeles",
"coordinates": {
"latitude": 77.1025,
"longitude": 28.7041
}
},
"emergencyContactInfo": {
"address": {
"addressLines": [
"Golden Gate Bridge"
],
"administrativeArea": "CA",
"administrativeAreaName": "California",
"description": "San Francisco Home",
"isDefault": true,
"languageCode": "en",
"locality": "San Francisco",
"locationCode": "LAX",
"organization": "Spotnana",
"postalCode": "94130",
"continentCode": "AF",
"recipients": [
"string"
],
"regionCode": "US",
"regionName": "America",
"revision": 1,
"sortingCode": "Jamaica",
"sublocality": "string",
"timezone": "America/Los_Angeles",
"coordinates": {
"latitude": 77.1025,
"longitude": 28.7041
}
},
"designation": "MANAGER",
"email": "emergency-contact@email.com",
"name": {
"family1": "Gandas",
"family2": "FamilyTwo",
"given": "Vichitr",
"middle": "Kumar",
"suffix": "SR",
"preferred": "Don"
},
"phoneNumber": {
"countryCode": 91,
"countryCodeSource": "FROM_NUMBER_WITH_PLUS_SIGN",
"extension": "222",
"isoCountryCode": "IN",
"italianLeadingZero": true,
"nationalNumber": 8150,
"numberOfLeadingZeros": 1,
"preferredDomesticCarrierCode": "7",
"rawInput": "77777",
"type": "MOBILE"
},
"userOrgId": {
"organizationAgencyId": {
"id": "string"
},
"organizationId": {
"id": "string"
},
"userId": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
},
"tmcInfo": {
"id": {},
"primaryServiceProviderTmc": {},
"secondaryServiceProviderTmcs": [
null
],
"partnerTmcId": {}
},
"tmcBasicInfo": {
"contractingTmc": {},
"bookingTmc": {}
}
}
},
"loyaltyInfos": [
{
"appliedTo": [
"TAJ"
],
"id": "firstId",
"issuedBy": "firstIssuedBy",
"type": "AIR",
"linked": false
}
],
"emergencyContact": {
"name": "John Smith",
"email": "emergency-contact@email.com",
"designation": "MANAGER",
"relation": "SPOUSE",
"phoneNumbers": [
{
"countryCode": 91,
"countryCodeSource": "FROM_NUMBER_WITH_PLUS_SIGN",
"extension": "222",
"isoCountryCode": "IN",
"italianLeadingZero": true,
"nationalNumber": 8150,
"numberOfLeadingZeros": 1,
"preferredDomesticCarrierCode": "7",
"rawInput": "77777",
"type": "MOBILE"
}
],
"preferredLanguage": "en-US"
}
},
"seats": [
{
"flightId": "string",
"seatNumbers": [
"string"
]
}
],
"baggages": [
{
"legId": "string",
"baggageIds": [
"string"
]
}
],
"ancillaries": [
{
"ancillaryId": "ancillary_0"
}
],
"shareContactInfo": false,
"specialServiceRequests": [
{
"indexes": {
"legIndex": 1,
"flightIndex": 2
},
"flightIndex": 0,
"code": "WCHC",
"info": "Special meal without egg."
}
]
}
],
"bookingCharges": [
{
"amount": {
"base": {
"amount": 510,
"currencyCode": "GBP",
"convertedAmount": 715.42,
"convertedCurrency": "USD",
"otherCoinage": [
{
"coinageCode": "BREX_POINTS",
"amount": 1000,
"conversionRate": 0.01,
"preferredCurrencyConversionRate": 0.01
}
]
},
"tax": {
"amount": 510,
"currencyCode": "GBP",
"convertedAmount": 715.42,
"convertedCurrency": "USD",
"otherCoinage": [
{
"coinageCode": "BREX_POINTS",
"amount": 1000,
"conversionRate": 0.01,
"preferredCurrencyConversionRate": 0.01
}
]
},
"taxBreakdown": [
{
"amount": {
"amount": 510,
"currencyCode": "GBP",
"convertedAmount": 715.42,
"convertedCurrency": "USD",
"otherCoinage": [
{}
]
},
"taxCode": "VAT",
"percentage": 9
}
]
},
"paymentMethod": {
"selectedPaymentSource": {
"paymentSourceId": "f49d00fe-1eda-4304-ba79-a980f565281d",
"rawPaymentSource": {
"type": "string",
"cardDetails": {
"company": "VISA",
"token": "4111111111111111",
"expiry": {}
}
},
"postPaymentRedirectionUrl": "https://mycompany.com/checkout?paymentSourceId=f49d00fe-1eda-4304-ba79-a980f565281d",
"cvv": "string",
"amount": {
"amount": 510,
"currencyCode": "GBP",
"convertedAmount": 715.42,
"convertedCurrency": "USD",
"otherCoinage": [
{}
]
}
}
}
}
],
"promotionCode": {
"code": "NEWUSER"
}
}'Response
application/json
{ "bookingId": "bookingid", "fareBreakDown": { "totalFare": { … }, "merchantFee": { … }, "airlineFee": { … }, "changeFee": { … } }, "legPrices": [ { … } ], "perTravelerPrices": [ { … } ], "policyDetails": { "policies": [ … ], "ruleResultInfos": [ … ] }, "mcoIssuanceEligibility": "ELIGIBLE" }
Request
Validates an itinerary at any interim stage of air booking workflow and allows you to keep track of fare details before proceeding to checkout. Using this endpoint is optional. It requires a searchId and the itineraryId to obtain the latest fare details of the selected itinerary. The travelerType field in this endpoint response currently only accepts ADULT, CHILD and INFANT.
Security
Bearer
- Sandbox URLhttps://api-ext-sboxmeta.partners.spotnana.com/v2/air/intermediate-revalidate-itinerary
- Spotnana mock serverhttps://developer.spotnana.com/_mock/openapi/airapi/v2/air/intermediate-revalidate-itinerary
- curl
- JavaScript
- Node.js
- Python
curl -i -X POST \
https://api-ext-sboxmeta.partners.spotnana.com/v2/air/intermediate-revalidate-itinerary \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"searchId": "string",
"itineraryId": "string"
}'Response
application/json
{ "bookingId": "bookingid", "fareBreakDown": { "totalFare": { … }, "merchantFee": { … }, "airlineFee": { … }, "changeFee": { … } }, "legPrices": [ { … } ], "perTravelerPrices": [ { … } ], "policyDetails": { "policies": [ … ], "ruleResultInfos": [ … ] }, "mcoIssuanceEligibility": "ELIGIBLE" }