These endpoints provide comprehensive functionality for managing hotel bookings. They enable users to search for hotels, check room rates and availability, create and modify bookings, and handle cancellations and rebooking.
The parameters required for searching hotels.
Occupancy values and dates for the hotel search.
List of occupancy details including the number of adults and children.
The check-in date for the hotel stay.
Criteria used for searching hotels. The searchType
field can contain one criteria per request.
Filters to refine the search result. Based on the user selected filters, the list of matching hotels will be displayed.
curl -i -X POST \
https://apis.spotnana.com/v2/hotel/search \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"searchParams": {
"occupancyDates": {
"occupancy": [
{
"numAdults": 1,
"numChildren": 0
}
],
"checkInDate": {
"iso8601": "2017-07-21T17:32"
},
"checkOutDate": {
"iso8601": "2017-07-21T17:32"
}
},
"searchBy": {
"searchType": "AIRPORT",
"airport": "LHR"
}
},
"filters": {
"prepaidQualifier": "INCLUDE_PREPAID",
"priceRange": {
"min": {
"amount": 510,
"currencyCode": "GBP"
},
"max": {
"amount": 510,
"currencyCode": "GBP"
}
},
"amenities": [
"ECO_FRIENDLY"
],
"chainCodes": [
"string"
],
"radius": {
"length": 150,
"unit": "MILE"
},
"starRatings": [
0
],
"nameQuery": "string",
"eligibleForLoyalty": false,
"showUnavailable": false,
"payByPoints": false,
"modifiableOnly": false,
"rateTypes": [
"PUBLISHED"
],
"propertyTypes": [
{
"type": "ALL_SUITE",
"description": "string"
}
],
"refundableOnly": false,
"preferredOnly": false
},
"sortOptions": [
{
"sortBy": "PRICE",
"sortOrder": "ASCENDING"
}
],
"userId": {
"userIdType": "USER_ID",
"userId": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
},
"paginationParams": {
"requestType": "PAGE_TOKEN",
"pageToken": "token"
}
}'
OK
List of hotels matching the search criteria.
Unique key for the hotel details.
Specifications and details of the hotel.
Address of the hotel.
Address lines
Code of administrative area. For example: DL for Delhi, India. Highest administrative subdivision which is used for postal addresses of a country or region. For example, this can be a state, a province, an oblast, or a prefecture. Specifically, for Spain this is the province and not the autonomous community (e.g. "Barcelona" and not "Catalonia"). Many countries don't use an administrative area in postal addresses. E.g. in Switzerland this should be left unpopulated.
Name of administrative area. This is full name corresponding to administrativeArea. Like Delhi for DL area code. For some places, code and name maybe same as well like Tokyo.
Whether this address is default address in case multiple addresses are specified.
BCP-47 language code of the contents of this address (if known). This is often the UI language of the input form or is expected to match one of the languages used in the address' country/region, or their transliterated equivalents. This can affect formatting in certain countries, but is not critical to the correctness of the data and will never affect any validation or other non-formatting related operations. Examples: "zh-Hant", "ja", "ja-Latn", "en".
Generally refers to the city/town portion of the address.
IATA 3-letter location code. See https://www.iata.org/en/services/codes.
The name of the organization at the address.
Postal code of the address. This is a required field when setting for a user/legal entity/company etc.
2 letter continent code of the continent this address falls in.
Region code of the country/region of the address.
Region name of the country/region of the address.
Additional, country-specific, sorting code. This is not used in most regions. Where it is used, the value is either a string like "CEDEX", optionally followed by a number (e.g. "CEDEX 7"), or just a number alone, representing the "sector code" (Jamaica), "delivery area indicator" (Malawi) or "post office indicator" (e.g. Côte d'Ivoire).
Sublocality of the address. This can be neighborhoods, boroughs, districts.
Time zone of the address.
Coordinates of the hotel.
Contact information for the hotel.
List of phone numbers for the hotel.
two digit country code
List of hotel amenities.
Amenity description
List of property types for the hotel.
Type of the property.
Hotel star rating detail.
Distance from the search point.
Indicates if the hotel has negotiated rates.
Rate related information for the cheapest rate available in the hotel.
Average nightly rate for the hotel.
Base amount
The numeric value for the amount of money.
The 3-letter currency code for the money amount (defined using ISO 4217 standard).
The converted currency and amount that has been converted (if a currency conversion has been requested). For example, if the call requests that money be sent in a specified currency (because the frontend requested the backend to send money in the user's preferred currency).
The 3-letter currency code for the converted currency (defined using ISO 4217 standard).
Tax
The numeric value for the amount of money.
The 3-letter currency code for the money amount (defined using ISO 4217 standard).
The converted currency and amount that has been converted (if a currency conversion has been requested). For example, if the call requests that money be sent in a specified currency (because the frontend requested the backend to send money in the user's preferred currency).
The 3-letter currency code for the converted currency (defined using ISO 4217 standard).
Total rate for the hotel stay.
Base amount
The numeric value for the amount of money.
The 3-letter currency code for the money amount (defined using ISO 4217 standard).
The converted currency and amount that has been converted (if a currency conversion has been requested). For example, if the call requests that money be sent in a specified currency (because the frontend requested the backend to send money in the user's preferred currency).
The 3-letter currency code for the converted currency (defined using ISO 4217 standard).
Tax
The numeric value for the amount of money.
The 3-letter currency code for the money amount (defined using ISO 4217 standard).
The converted currency and amount that has been converted (if a currency conversion has been requested). For example, if the call requests that money be sent in a specified currency (because the frontend requested the backend to send money in the user's preferred currency).
The 3-letter currency code for the converted currency (defined using ISO 4217 standard).
Set to true if the hotel rate is refundable.
Information about reward points earned.
Includes metadata for a hotel search.
A list of available hotel chains.
Contains statistical information about hotel search results.
Details median rate information for a hotel.
Total Amount.
The numeric value for the amount of money.
The 3-letter currency code for the money amount (defined using ISO 4217 standard).
The converted currency and amount that has been converted (if a currency conversion has been requested). For example, if the call requests that money be sent in a specified currency (because the frontend requested the backend to send money in the user's preferred currency).
The 3-letter currency code for the converted currency (defined using ISO 4217 standard).
Base Amount.
The numeric value for the amount of money.
The 3-letter currency code for the money amount (defined using ISO 4217 standard).
The converted currency and amount that has been converted (if a currency conversion has been requested). For example, if the call requests that money be sent in a specified currency (because the frontend requested the backend to send money in the user's preferred currency).
The 3-letter currency code for the converted currency (defined using ISO 4217 standard).
Size of the sample set used to calculate the statistics.
Indicates if only base fare should be shown.
Pagination response for token based pagination. Contains the next page token(if next page is available) and pagination parameters.
{ "hotels": [ { … } ], "metadata": { "availableHotelChains": [ … ], "rateStatistics": { … }, "showOnlyBaseFare": false, "sessionId": "string" }, "paginationParams": { "nextPageToken": "string", "currentPageSize": 10 } }
curl -i -X POST \
https://apis.spotnana.com/v2/hotel/details \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"hotelDetailsKey": "string",
"corporateInfo": {
"preSearchAnswers": {
"answers": [
{
"entityId": "string",
"userInput": "string",
"itemIds": [
0
],
"answers": [
{
"item": "string",
"value": "string",
"description": "string"
}
],
"customFieldType": "QUESTION",
"questionDisplayText": "string",
"question": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "string",
"questionFormat": "CHECKBOX",
"optionInfo": {
"source": "MANUAL",
"sourceMetadata": {},
"totalNumOptions": 0,
"options": [
null
]
},
"isRequired": true,
"isDisabled": true,
"includeInItinerary": true,
"customFieldLocations": [
"POLICY_APPROVAL_EMAIL"
],
"matchConditions": {
"travelerConditions": {
"workerTypes": [],
"countries": [],
"legalEntities": [],
"departments": [],
"costCenters": [],
"offices": []
},
"travelTypes": [
null
],
"travelRegionTypes": [
null
],
"tripUsageTypes": [
null
]
},
"questionType": {
"preSearchQuestionType": "PURPOSE_OF_TRIP",
"preCheckoutQuestionType": "OOP_REASON_CODE"
}
}
}
],
"userEntitiesResponseId": "string"
}
},
"occupancyDates": {
"occupancy": [
{
"numAdults": 1,
"numChildren": 0
}
],
"checkInDate": {
"iso8601": "2017-07-21T17:32"
},
"checkOutDate": {
"iso8601": "2017-07-21T17:32"
}
},
"filters": {
"rateTypes": [
"PUBLISHED"
]
},
"userId": {
"userIdType": "USER_ID",
"userId": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}
}'
OK
Specification of the hotel.
Address of the hotel.
Address lines
Code of administrative area. For example: DL for Delhi, India. Highest administrative subdivision which is used for postal addresses of a country or region. For example, this can be a state, a province, an oblast, or a prefecture. Specifically, for Spain this is the province and not the autonomous community (e.g. "Barcelona" and not "Catalonia"). Many countries don't use an administrative area in postal addresses. E.g. in Switzerland this should be left unpopulated.
Name of administrative area. This is full name corresponding to administrativeArea. Like Delhi for DL area code. For some places, code and name maybe same as well like Tokyo.
Whether this address is default address in case multiple addresses are specified.
BCP-47 language code of the contents of this address (if known). This is often the UI language of the input form or is expected to match one of the languages used in the address' country/region, or their transliterated equivalents. This can affect formatting in certain countries, but is not critical to the correctness of the data and will never affect any validation or other non-formatting related operations. Examples: "zh-Hant", "ja", "ja-Latn", "en".
Generally refers to the city/town portion of the address.
IATA 3-letter location code. See https://www.iata.org/en/services/codes.
The name of the organization at the address.
Postal code of the address. This is a required field when setting for a user/legal entity/company etc.
2 letter continent code of the continent this address falls in.
Region code of the country/region of the address.
Region name of the country/region of the address.
Additional, country-specific, sorting code. This is not used in most regions. Where it is used, the value is either a string like "CEDEX", optionally followed by a number (e.g. "CEDEX 7"), or just a number alone, representing the "sector code" (Jamaica), "delivery area indicator" (Malawi) or "post office indicator" (e.g. Côte d'Ivoire).
Sublocality of the address. This can be neighborhoods, boroughs, districts.
Coordinates of the hotel.
Contact information for the hotel.
List of phone numbers for the hotel.
List of hotel amenities.
Amenity description
List of property types for the hotel.
Type of the property.
Hotel star rating detail.
List of available rooms in the hotel.
A list of rate options available for the hotel room.
Information about the beds in the room.
Information about the rate.
The source of the rate.
The total rate for the room.
Tax breakdown
The type of rate.
The nightly rate for the room.
Tax breakdown
Indicates if CVV is required for payment.
The average nightly rate for the room.
Tax breakdown
The supplier of the rate.
The published rate for the room.
The published nightly rate for the room.
The difference between the published rate and the actual rate.
The prepaid rate for the room.
Tax breakdown
The postpaid rate for the room.
Tax breakdown
A list of amenities included with the rate.
The cancellation policy for the rate.
Information about applicable policies.
Unique identifier for the policy.
Type of policy.
Information about the policy rules.
The type of guarantee required for the rate.
Information about the room.
The type of room.
List of room class.
A list of additional amenities included with the rate.
A list of card types supported for payment.
The number of rooms required for this rate option.
The maximum occupancy for the room.
A list of additional details about the rate option.
Indicates if loyalty points can be earned with this rate.
A list of reward points earned with this rate.
Type of reward points.
Total points that will be credited.
A list of promotional offers applicable to the rate.
A list of descriptions related to payment for the rate.
Indicates if the form of payment is modifiable.
List of booked rooms in the hotel, present only as part of modification details response.
Occupancy values and dates for the hotel details.
List of occupancy details including the number of adults and children.
The check-in date for the hotel stay.
{ "hotelSpec": { "name": "London Heathrow Marriott Hotel", "address": { … }, "coordinates": { … }, "contactInfo": { … }, "amenities": [ … ], "descriptions": [ … ], "imageSets": [ … ], "hotelId": "SPOTNANA:1001", "brandCode": "MC", "brandName": "Marriott Hotel Brands", "chainCode": "EM", "chainName": "Marriott Hotels & Resorts", "propertyTypes": [ … ], "starRating": { … }, "additionalAmenities": [ … ], "checkinTime": { … }, "checkoutTime": { … } }, "rooms": [ { … } ], "bookedRooms": [ { … } ], "occupancyDates": { "occupancy": [ … ], "checkInDate": { … }, "checkOutDate": { … } }, "rateStatistics": { "median": { … }, "sampleSize": 100, "policyType": "DEFAULT" }, "showOnlyBaseFare": true, "preferences": [ { … } ], "termsAndConditions": [ { … } ] }
Checks if the previously selected hotel price has been modified. To indicate the change in hotel price, the priceChange
field in the response will be set to true
and the price
object will contain the latest hotel price. If the price remains unchanged, the priceChange
field will be set as false
and the price
object will contain the original price.
curl -i -X POST \
https://apis.spotnana.com/v2/hotel/price-check \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"priceValidateKey": "string",
"tripId": "string"
}'
OK
Final price for the booking.
Base amount
The 3-letter currency code for the money amount (defined using ISO 4217 standard).
The converted currency and amount that has been converted (if a currency conversion has been requested). For example, if the call requests that money be sent in a specified currency (because the frontend requested the backend to send money in the user's preferred currency).
The 3-letter currency code for the converted currency (defined using ISO 4217 standard).
Tax
The 3-letter currency code for the money amount (defined using ISO 4217 standard).
The converted currency and amount that has been converted (if a currency conversion has been requested). For example, if the call requests that money be sent in a specified currency (because the frontend requested the backend to send money in the user's preferred currency).
The 3-letter currency code for the converted currency (defined using ISO 4217 standard).
{ "bookingKey": "string", "timeout": 0, "priceChange": true, "price": { "base": { … }, "tax": { … }, "roomFees": [ … ], "commission": { … }, "taxBreakdown": [ … ], "includesCommission": false } }
Validates if a hotel rebooking can be performed for price optimization purpose. The Source PNR ID provided in the request will be checked if it's eligible for rebooking. In the response, if isValid
is true
then users can proceed to checkout flow, which cancels the existing Source PNR and creates a new PNR to save booking cost.
Source PNR ID that needs to be validated.
List of travelers
Persona of the user
Tier of User. Note: In default UI, BASIC is displayed as Standard, and SEAT1A is displayed as VIP.
Basic information related to ad-hoc traveler profile.
curl -i -X POST \
https://apis.spotnana.com/v2/hotel/validate-rebooking \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"cancelSourcePnrId": "1cf76aba18e4015f",
"travelers": [
{
"travelerPersonalInfo": {
"loyaltyInfos": [
{
"appliedTo": [
"TAJ"
],
"id": "firstId",
"issuedBy": "firstIssuedBy",
"type": "AIR"
}
],
"travelPref": {
"airPref": {
"airlinePrefs": [
{
"airlines": []
}
],
"alliancePref": {
"alliances": [
null
]
},
"farePref": {
"fareTypes": [
null
]
},
"homeAirport": "NEW YORK",
"mealPref": {
"exclMealPrefs": [
null
],
"inclMealPrefs": [
null
],
"specialMealDescription": "Veg only meal"
},
"numStopPref": {
"numOfStops": 34
},
"seatAmenityPref": {
"seatAmenityTypes": [
null
]
},
"seatLocationPrefs": [
{
"cabins": []
}
],
"preferredAirports": [
{}
]
},
"preferredCurrency": "USD",
"railCards": [
{
"cardNumber": "string",
"expiryDate": {},
"name": "Veterans Railcard",
"spotnanaCode": "VET",
"vendor": "ATOC"
}
],
"railPref": {
"preferredRailStations": [
{}
],
"seatPreference": {
"hasAccessibility": false,
"seatTypes": [
null
],
"seatLocations": [
null
],
"deckLevels": [
null
],
"seatDirections": [
null
]
},
"travelClasses": [
"FIRST"
],
"coachPreferences": [
"NON_SMOKING"
],
"conditionalRates": [
"AAA"
]
},
"carPref": {
"vendors": [
{}
],
"carTypes": [
"ECONOMY"
],
"engineTypes": [
"PETROL"
],
"transmissionTypes": [
"AUTOMATIC"
],
"conditionalRates": [
"AAA"
]
},
"hotelPref": {
"hotelParentChains": [
{}
],
"hotelBrands": [
{}
],
"hotelAmenityTypes": [
"PARKING"
],
"roomPreference": {
"isMobilityAccessible": false,
"bedCount": "ONE_BED",
"roomType": "SMOKING",
"mostImportantFact": "BED_COUNT",
"roomLocation": "HIGH_FLOOR",
"pillowType": "FOAM",
"roomAmenityPrefs": [
null
]
},
"conditionalRates": [
"AAA"
]
}
}
},
"user": {
"addresses": [
{
"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
}
}
],
"dob": {
"iso8601": "2017-07-21"
},
"email": "example@email.com",
"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": {}
}
}
},
"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"
},
"gender": "FEMALE",
"identityDocs": [
{
"passport": {
"docId": "PASSPORTID",
"expiryDate": {
"iso8601": "2017-07-21"
},
"issueCountry": "IN",
"issuedDate": {
"iso8601": "2017-07-21"
},
"nationalityCountry": "IN",
"type": "REGULAR"
}
},
{
"ktn": {
"number": "123456",
"issueCountry": "US"
}
}
],
"name": {
"family1": "Gandas",
"family2": "FamilyTwo",
"given": "Vichitr",
"middle": "Kumar",
"suffix": "SR",
"preferred": "Don"
},
"paymentInfos": [
{
"applicableTo": [
"HOTEL"
],
"card": {
"id": "34d536b6-f8ff-11eb-9a61-0242ac180002",
"type": "CREDIT",
"company": "VISA",
"name": "Harrison Schwartz",
"address": {
"addressLines": [],
"recipients": []
},
"number": "4111111111111111",
"expiryMonth": 1,
"expiryYear": 2010,
"cvv": "012",
"label": "Label amex",
"currency": "USD",
"externalId": "bxt_RNGsNfzgJDaTstKIKqK4xEuhGYAnMdYK8T40",
"vaultId": "34d536b6-f8ff-11eb-9a61-0242ac180002",
"expiry": {},
"ownershipLabel": "CORPORATE"
},
"accessType": "UNKNOWN_TYPE",
"access": {
"accessType": "UNKNOWN_TYPE",
"entityIds": [
null
],
"entities": [
null
]
}
}
],
"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"
}
],
"profilePicture": {
"data": "6935813e12584abda0e43d71cd2ea260",
"dimensions": {
"height": 120,
"width": 240
},
"url": "https://static.wixstatic.com/media/73f2e2_6935813e12584abda0e43d71cd2ea260~mv2.png/v1/fill/w_630,h_94,al_c,q_85,usm_0.66_1.00_0.01/Spotnana%403x.webp"
},
"nationality": "Indian",
"title": "MR"
},
"userBusinessInfo": {
"department": {
"id": {
"id": "631ccbcf-9414-5fe0-c234-b324dfbe7422"
},
"name": "IT Department",
"externalId": "department-ext-id",
"employeeCount": 57
},
"designation": "MANAGER",
"email": "user@business.com",
"employeeId": "101",
"grade": {
"employeeCount": 75,
"id": {
"id": "831ccbcb-1416-7fe2-e236-d324dfbe7424"
},
"name": "Grade"
},
"legalEntityId": {
"id": "fc1ccbce-8413-4fe9-b233-a324dfbe7421"
},
"managerBasicInfo": {
"userOrgId": {
"organizationAgencyId": {
"id": "string"
},
"organizationId": {
"id": "string"
},
"userId": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
},
"tmcInfo": {
"id": {},
"primaryServiceProviderTmc": {},
"secondaryServiceProviderTmcs": [
null
],
"partnerTmcId": {}
},
"tmcBasicInfo": {
"contractingTmc": {},
"bookingTmc": {}
}
},
"persona": "EMPLOYEE",
"email": "example@email.com",
"name": {
"family1": "Gandas",
"family2": "FamilyTwo",
"given": "Vichitr",
"middle": "Kumar",
"suffix": "SR",
"preferred": "Don"
},
"profilePicture": {
"data": "6935813e12584abda0e43d71cd2ea260",
"dimensions": {
"height": 120,
"width": 240
},
"url": "https://static.wixstatic.com/media/73f2e2_6935813e12584abda0e43d71cd2ea260~mv2.png/v1/fill/w_630,h_94,al_c,q_85,usm_0.66_1.00_0.01/Spotnana%403x.webp"
},
"tier": "SEAT1A",
"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"
},
"employeeId": "string",
"isActive": true
},
"office": {
"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
}
},
"id": {
"id": "531ccbce-8413-4fe9-b233-a324dfbe7421"
},
"name": "Office",
"latlng": {
"latitude": 77.1025,
"longitude": 28.7041
},
"taxId": "133232"
},
"organizationId": {
"id": "string"
},
"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"
}
],
"userCostCenter": {
"id": {
"id": "731ccbca-0415-6fe1-d235-c324dfbe7423"
},
"name": "CostCenter",
"externalId": "external-id"
},
"designatedApproverInfos": [
{
"userOrgId": {
"organizationAgencyId": {},
"organizationId": {},
"userId": {},
"tmcInfo": {
"secondaryServiceProviderTmcs": []
},
"tmcBasicInfo": {}
},
"persona": "EMPLOYEE",
"email": "example@email.com",
"name": {
"family1": "Gandas",
"family2": "FamilyTwo",
"given": "Vichitr",
"middle": "Kumar",
"suffix": "SR",
"preferred": "Don"
},
"profilePicture": {
"data": "6935813e12584abda0e43d71cd2ea260",
"dimensions": {},
"url": "https://static.wixstatic.com/media/73f2e2_6935813e12584abda0e43d71cd2ea260~mv2.png/v1/fill/w_630,h_94,al_c,q_85,usm_0.66_1.00_0.01/Spotnana%403x.webp"
},
"tier": "SEAT1A",
"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"
},
"employeeId": "string",
"isActive": true
}
],
"designatedApproverUserIds": [
{
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
],
"authorizerEmail": "example@email.com"
},
"userOrgId": {
"organizationAgencyId": {
"id": "string"
},
"organizationId": {
"id": "string"
},
"userId": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
},
"tmcInfo": {
"id": {
"id": "f49d00fe-1eda-4304-ba79-a980f565281d"
},
"primaryServiceProviderTmc": {
"tmcId": {
"id": "f49d00fe-1eda-4304-ba79-a980f565281d"
}
},
"secondaryServiceProviderTmcs": [
{
"tmcId": {},
"supplier": "SABRE",
"travelType": "AIR"
}
],
"partnerTmcId": {
"id": "f49d00fe-1eda-4304-ba79-a980f565281d"
}
},
"tmcBasicInfo": {
"contractingTmc": {
"id": {
"id": "f49d00fe-1eda-4304-ba79-a980f565281d"
},
"name": "string",
"logo": {
"data": "6935813e12584abda0e43d71cd2ea260",
"dimensions": {},
"url": "https://static.wixstatic.com/media/73f2e2_6935813e12584abda0e43d71cd2ea260~mv2.png/v1/fill/w_630,h_94,al_c,q_85,usm_0.66_1.00_0.01/Spotnana%403x.webp"
}
},
"bookingTmc": {
"id": {
"id": "f49d00fe-1eda-4304-ba79-a980f565281d"
},
"name": "string",
"logo": {
"data": "6935813e12584abda0e43d71cd2ea260",
"dimensions": {},
"url": "https://static.wixstatic.com/media/73f2e2_6935813e12584abda0e43d71cd2ea260~mv2.png/v1/fill/w_630,h_94,al_c,q_85,usm_0.66_1.00_0.01/Spotnana%403x.webp"
}
}
}
},
"persona": "EMPLOYEE",
"isActive": true,
"tier": "SEAT1A",
"adhocUserInfo": {
"profileOwner": {
"userId": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
},
"isSaved": false
},
"externalId": "string"
}
],
"tripId": {
"id": "2783425534"
}
}'
{ "isValid": true, "spotnanaPnrId": "1cf76aba18e4015f" }
The list of travelers and their details. The traveler at index 0 will be considered as the primary traveler and their details will be passed to the supplier.
The ID of the traveler.
Name of the traveler.
Suffix used with the name. For example SR or JR.
Phone number of the traveler.
Trip data to book a PNR.
Email address of the approver who should receives approval email for the current booking.
Whether the current booking requires hard approval or soft approval. This flag should be used only if valid approver is present.
Payment details used for booking.
Unique identifier identifying this payment source.
Object to pass through dpan payment source details through the api call.
Url for post payment redirection if payment source navigates user to a third party url
The source PNR ID within the booking source that needs to be canceled in favor of the new booking that is being created.
Savings information from the rate assurance rebooking
curl -i -X POST \
https://apis.spotnana.com/v2/hotel/create-pnr \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"bookingKey": "example_booking_key",
"travelers": [
{
"travelerId": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
},
"name": {
"family1": "Gandas",
"family2": "FamilyTwo",
"given": "Vichitr",
"middle": "Kumar",
"suffix": "SR",
"preferred": "Don"
},
"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": "mail@mail.com",
"loyaltyInfo": {
"appliedTo": [
"TAJ"
],
"id": "firstId",
"issuedBy": "firstIssuedBy",
"type": "AIR"
},
"adhocInfo": {
"profileOwnerId": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}
}
],
"tripData": {
"approverEmail": "string",
"approverName": "string",
"hardApprovalRequired": true,
"outOfPolicy": true,
"policyId": "string",
"policyVersion": 0,
"tripId": {
"id": "2783425534"
}
},
"preBookAnswers": {
"answers": [
{
"entityId": "string",
"userInput": "string",
"itemIds": [
0
],
"answers": [
{
"item": "string",
"value": "string",
"description": "string"
}
],
"customFieldType": "QUESTION",
"questionDisplayText": "string",
"question": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "string",
"questionFormat": "CHECKBOX",
"optionInfo": {
"source": "MANUAL",
"sourceMetadata": {
"companyConfig": {}
},
"totalNumOptions": 0,
"options": [
{}
]
},
"isRequired": true,
"isDisabled": true,
"includeInItinerary": true,
"customFieldLocations": [
"POLICY_APPROVAL_EMAIL"
],
"matchConditions": {
"travelerConditions": {
"workerTypes": [
null
],
"countries": [
null
],
"legalEntities": [
null
],
"departments": [
null
],
"costCenters": [
null
],
"offices": [
null
]
},
"travelTypes": [
"AIR"
],
"travelRegionTypes": [
"DOMESTIC"
],
"tripUsageTypes": [
"STANDARD"
]
},
"questionType": {
"preSearchQuestionType": "PURPOSE_OF_TRIP",
"preCheckoutQuestionType": "OOP_REASON_CODE"
}
}
}
],
"preBookQuestionResponseId": "string"
},
"bookingPaymentDetails": {
"bookingTravelerPaymentDetails": [
{
"selectedFormOfPayments": [
{
"paymentItems": [
{
"fareComponent": []
}
],
"selectedPaymentSources": [
{}
]
}
]
}
]
},
"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"
}
},
"hotelSpecialRequests": {
"roomLocations": [
"HIGH_FLOOR"
],
"roomFeatures": [
"FEATHER_FREE_ROOM"
],
"checkIn": "LATE_CHECK_IN",
"checkInTime": {
"iso8601": "17:32"
},
"flightNumber": "AC1234",
"additionalNote": "Extra pillows and blankets for added comfort during the stay.",
"accessibleFeatures": [
"MOBILITY_ACCESSIBLE_ROOM_WITH_TUB"
]
},
"cancelSourcePnrId": "ABC123",
"hotelRateAssuranceInfo": {
"selfReportedSavings": {
"amount": 510,
"currencyCode": "GBP"
},
"actualSavings": {
"amount": 510,
"currencyCode": "GBP"
}
},
"customFieldV3Responses": [
{
"fieldId": "84922011-b03d-4966-bc95-c5b49bc2e342",
"fieldName": "string",
"armId": "0fd508db-63ff-4444-bfb1-b89c43061433",
"selectedOptions": [
{
"name": "string",
"description": "string",
"additionalUserInput": "string",
"additionalInfos": [
"string"
]
}
]
}
]
}'
{ "pnrId": "7373737373", "pnrStatus": "SUCCESS", "externalPnrId": "ABC123" }
curl -i -X POST \
https://apis.spotnana.com/v2/hotel/pnrs/4974a66b/cancel-pnr \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"customFieldV3Responses": [
{
"fieldId": "84922011-b03d-4966-bc95-c5b49bc2e342",
"fieldName": "string",
"armId": "0fd508db-63ff-4444-bfb1-b89c43061433",
"selectedOptions": [
{
"name": "string",
"description": "string",
"additionalUserInput": "string",
"additionalInfos": [
"string"
]
}
]
}
]
}'
{ "confirmationId": "231241232" }
Occupancy values and dates for the hotel details.
List of occupancy details including the number of adults and children.
The check-in date for the hotel stay.
curl -i -X POST \
https://apis.spotnana.com/v2/hotel/pnrs/4974a66b/modify-details \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"occupancyDates": {
"occupancy": [
{
"numAdults": 1,
"numChildren": 0
}
],
"checkInDate": {
"iso8601": "2017-07-21T17:32"
},
"checkOutDate": {
"iso8601": "2017-07-21T17:32"
}
},
"corporateInfo": {
"preSearchAnswers": {
"answers": [
{
"entityId": "string",
"userInput": "string",
"itemIds": [
0
],
"answers": [
{
"item": "string",
"value": "string",
"description": "string"
}
],
"customFieldType": "QUESTION",
"questionDisplayText": "string",
"question": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "string",
"questionFormat": "CHECKBOX",
"optionInfo": {
"source": "MANUAL",
"sourceMetadata": {},
"totalNumOptions": 0,
"options": [
null
]
},
"isRequired": true,
"isDisabled": true,
"includeInItinerary": true,
"customFieldLocations": [
"POLICY_APPROVAL_EMAIL"
],
"matchConditions": {
"travelerConditions": {
"workerTypes": [],
"countries": [],
"legalEntities": [],
"departments": [],
"costCenters": [],
"offices": []
},
"travelTypes": [
null
],
"travelRegionTypes": [
null
],
"tripUsageTypes": [
null
]
},
"questionType": {
"preSearchQuestionType": "PURPOSE_OF_TRIP",
"preCheckoutQuestionType": "OOP_REASON_CODE"
}
}
}
],
"userEntitiesResponseId": "string"
}
}
}'
OK
Specification of the hotel.
Address of the hotel.
Address lines
Code of administrative area. For example: DL for Delhi, India. Highest administrative subdivision which is used for postal addresses of a country or region. For example, this can be a state, a province, an oblast, or a prefecture. Specifically, for Spain this is the province and not the autonomous community (e.g. "Barcelona" and not "Catalonia"). Many countries don't use an administrative area in postal addresses. E.g. in Switzerland this should be left unpopulated.
Name of administrative area. This is full name corresponding to administrativeArea. Like Delhi for DL area code. For some places, code and name maybe same as well like Tokyo.
Whether this address is default address in case multiple addresses are specified.
BCP-47 language code of the contents of this address (if known). This is often the UI language of the input form or is expected to match one of the languages used in the address' country/region, or their transliterated equivalents. This can affect formatting in certain countries, but is not critical to the correctness of the data and will never affect any validation or other non-formatting related operations. Examples: "zh-Hant", "ja", "ja-Latn", "en".
Generally refers to the city/town portion of the address.
IATA 3-letter location code. See https://www.iata.org/en/services/codes.
The name of the organization at the address.
Postal code of the address. This is a required field when setting for a user/legal entity/company etc.
2 letter continent code of the continent this address falls in.
Region code of the country/region of the address.
Region name of the country/region of the address.
Additional, country-specific, sorting code. This is not used in most regions. Where it is used, the value is either a string like "CEDEX", optionally followed by a number (e.g. "CEDEX 7"), or just a number alone, representing the "sector code" (Jamaica), "delivery area indicator" (Malawi) or "post office indicator" (e.g. Côte d'Ivoire).
Sublocality of the address. This can be neighborhoods, boroughs, districts.
Coordinates of the hotel.
Contact information for the hotel.
List of phone numbers for the hotel.
List of hotel amenities.
Amenity description
List of property types for the hotel.
Type of the property.
Hotel star rating detail.
List of available rooms in the hotel.
A list of rate options available for the hotel room.
Information about the beds in the room.
Information about the rate.
The source of the rate.
The total rate for the room.
Tax breakdown
The type of rate.
The nightly rate for the room.
Tax breakdown
Indicates if CVV is required for payment.
The average nightly rate for the room.
Tax breakdown
The supplier of the rate.
The published rate for the room.
The published nightly rate for the room.
The difference between the published rate and the actual rate.
The prepaid rate for the room.
Tax breakdown
The postpaid rate for the room.
Tax breakdown
A list of amenities included with the rate.
The cancellation policy for the rate.
Information about applicable policies.
Unique identifier for the policy.
Type of policy.
Information about the policy rules.
The type of guarantee required for the rate.
Information about the room.
The type of room.
List of room class.
A list of additional amenities included with the rate.
A list of card types supported for payment.
The number of rooms required for this rate option.
The maximum occupancy for the room.
A list of additional details about the rate option.
Indicates if loyalty points can be earned with this rate.
A list of reward points earned with this rate.
Type of reward points.
Total points that will be credited.
A list of promotional offers applicable to the rate.
A list of descriptions related to payment for the rate.
Indicates if the form of payment is modifiable.
List of booked rooms in the hotel, present only as part of modification details response.
Occupancy values and dates for the hotel details.
List of occupancy details including the number of adults and children.
The check-in date for the hotel stay.
{ "hotelSpec": { "name": "London Heathrow Marriott Hotel", "address": { … }, "coordinates": { … }, "contactInfo": { … }, "amenities": [ … ], "descriptions": [ … ], "imageSets": [ … ], "hotelId": "SPOTNANA:1001", "brandCode": "MC", "brandName": "Marriott Hotel Brands", "chainCode": "EM", "chainName": "Marriott Hotels & Resorts", "propertyTypes": [ … ], "starRating": { … }, "additionalAmenities": [ … ], "checkinTime": { … }, "checkoutTime": { … } }, "rooms": [ { … } ], "bookedRooms": [ { … } ], "occupancyDates": { "occupancy": [ … ], "checkInDate": { … }, "checkOutDate": { … } }, "rateStatistics": { "median": { … }, "sampleSize": 100, "policyType": "DEFAULT" }, "showOnlyBaseFare": true, "preferences": [ { … } ], "termsAndConditions": [ { … } ] }
The list of travelers, the first traveler is considered as primary traveler
The ID of the traveler.
Name of the traveler.
Suffix used with the name. For example SR or JR.
Phone number of the traveler.
Trip data to book a PNR.
Email address of the approver who should receives approval email for the current booking.
Whether the current booking requires hard approval or soft approval. This flag should be used only if valid approver is present.
curl -i -X POST \
https://apis.spotnana.com/v2/hotel/pnrs/4974a66b/modify-book \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"bookingKey": "example_booking_key",
"travelers": [
{
"travelerId": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
},
"name": {
"family1": "Gandas",
"family2": "FamilyTwo",
"given": "Vichitr",
"middle": "Kumar",
"suffix": "SR",
"preferred": "Don"
},
"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": "mail@mail.com",
"loyaltyInfo": {
"appliedTo": [
"TAJ"
],
"id": "firstId",
"issuedBy": "firstIssuedBy",
"type": "AIR"
},
"adhocInfo": {
"profileOwnerId": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}
}
],
"tripData": {
"approverEmail": "string",
"approverName": "string",
"hardApprovalRequired": true,
"outOfPolicy": true,
"policyId": "string",
"policyVersion": 0,
"tripId": {
"id": "2783425534"
}
},
"preBookAnswers": {
"answers": [
{
"entityId": "string",
"userInput": "string",
"itemIds": [
0
],
"answers": [
{
"item": "string",
"value": "string",
"description": "string"
}
],
"customFieldType": "QUESTION",
"questionDisplayText": "string",
"question": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"name": "string",
"questionFormat": "CHECKBOX",
"optionInfo": {
"source": "MANUAL",
"sourceMetadata": {
"companyConfig": {}
},
"totalNumOptions": 0,
"options": [
{}
]
},
"isRequired": true,
"isDisabled": true,
"includeInItinerary": true,
"customFieldLocations": [
"POLICY_APPROVAL_EMAIL"
],
"matchConditions": {
"travelerConditions": {
"workerTypes": [
null
],
"countries": [
null
],
"legalEntities": [
null
],
"departments": [
null
],
"costCenters": [
null
],
"offices": [
null
]
},
"travelTypes": [
"AIR"
],
"travelRegionTypes": [
"DOMESTIC"
],
"tripUsageTypes": [
"STANDARD"
]
},
"questionType": {
"preSearchQuestionType": "PURPOSE_OF_TRIP",
"preCheckoutQuestionType": "OOP_REASON_CODE"
}
}
}
],
"preBookQuestionResponseId": "string"
},
"hotelSpecialRequests": {
"roomLocations": [
"HIGH_FLOOR"
],
"roomFeatures": [
"FEATHER_FREE_ROOM"
],
"checkIn": "LATE_CHECK_IN",
"checkInTime": {
"iso8601": "17:32"
},
"flightNumber": "AC1234",
"additionalNote": "Extra pillows and blankets for added comfort during the stay.",
"accessibleFeatures": [
"MOBILITY_ACCESSIBLE_ROOM_WITH_TUB"
]
},
"bookingPaymentDetails": {
"bookingTravelerPaymentDetails": [
{
"selectedFormOfPayments": [
{
"paymentItems": [
{
"fareComponent": []
}
],
"selectedPaymentSources": [
{}
]
}
]
}
]
},
"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"
}
},
"customFieldV3Responses": [
{
"fieldId": "84922011-b03d-4966-bc95-c5b49bc2e342",
"fieldName": "string",
"armId": "0fd508db-63ff-4444-bfb1-b89c43061433",
"selectedOptions": [
{
"name": "string",
"description": "string",
"additionalUserInput": "string",
"additionalInfos": [
"string"
]
}
]
}
]
}'
{ "pnrId": "7373737373", "pnrStatus": "CONFIRMED", "externalPnrId": "ABC123" }