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.
Local date and time represented in the ISO 8601 standard.
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://developer.spotnana.com/_mock/openapi/hotelapi/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.
Includes detailed specifications for a hotel, such as name, star rating, address, coordinates, amenities, and other information.
Postal Address Details
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.
Latitude and Longitude for a Location
Provides contact information for a 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.
Details about hotel star rating.
Specifies the length or a distance.
Includes detailed information about a policy, such as its unique identifier, type, name, rules, version, and approval type.
Indicates if the hotel has negotiated rates.
Contains detailed rate information for a hotel search.
Rate details for hotel room
Money object containing details such as the amount, the currency code, and the converted 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).
Money object containing details such as the amount, the currency code, and the converted 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).
Rate details for hotel room
Money object containing details such as the amount, the currency code, and the converted 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).
Money object containing details such as the amount, the currency code, and the converted 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).
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.
Money object containing details such as the amount, the currency code, and the converted 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).
Money object containing details such as the amount, the currency code, and the converted 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://developer.spotnana.com/_mock/openapi/hotelapi/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
Includes detailed specifications for a hotel, such as name, star rating, address, coordinates, amenities, and other information.
Postal Address Details
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.
Latitude and Longitude for a Location
Provides contact information for a 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.
Details about hotel star rating.
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 a hotel rate.
The source of the rate.
Rate details for hotel room
Money object containing details such as the amount, the currency code, and the converted amount.
Money object containing details such as the amount, the currency code, and the converted amount.
Tax breakdown
The type of rate.
The nightly rate for the room.
Money object containing details such as the amount, the currency code, and the converted amount.
Money object containing details such as the amount, the currency code, and the converted amount.
Tax breakdown
Indicates if CVV is required for payment.
Rate details for hotel room
Money object containing details such as the amount, the currency code, and the converted amount.
Money object containing details such as the amount, the currency code, and the converted amount.
Tax breakdown
Money object containing details such as the amount, the currency code, and the converted amount.
The supplier of the rate.
Rate details for hotel room
Rate details for hotel room
Money object containing details such as the amount, the currency code, and the converted amount.
Money object containing details such as the amount, the currency code, and the converted amount.
Tax breakdown
Rate details for hotel room
Money object containing details such as the amount, the currency code, and the converted amount.
Money object containing details such as the amount, the currency code, and the converted amount.
Tax breakdown
Money object containing details such as the amount, the currency code, and the converted amount.
A list of amenities included with the rate.
Cancellation policy for the PNR
Includes detailed information about a policy, such as its unique identifier, type, name, rules, version, and approval type.
Identifier of an object
Policy type.
Information about the policy rules.
The type of guarantee required for the rate.
Information about the room.
Room Type
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.
Local date and time represented in the ISO 8601 standard.
Contains statistical information about hotel search results.
{ "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://developer.spotnana.com/_mock/openapi/hotelapi/v2/hotel/price-check \ -H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \ -H 'Content-Type: application/json' \ -d '{ "priceValidateKey": "string", "tripId": "string" }'
OK
Rate details for hotel room
Money object containing details such as the amount, the currency code, and the converted 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).
Money object containing details such as the amount, the currency code, and the converted 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).
{ "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
Basic information related to ad-hoc traveler profile.
curl -i -X POST \ https://developer.spotnana.com/_mock/openapi/hotelapi/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": "CENTRAL" }, "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": { "employeeCount": 120, "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.
User identifier
Full name containing first, middle, last (family) names, and suffix.
Suffix for name
Properly formatted phone number.
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.
curl -i -X POST \ https://developer.spotnana.com/_mock/openapi/hotelapi/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" } } }'
{ "pnrId": "7373737373", "pnrStatus": "SUCCESS", "externalPnrId": "ABC123" }
curl -i -X POST \ 'https://developer.spotnana.com/_mock/openapi/hotelapi/v2/hotel/pnrs/{pnrId}/cancel-pnr' \ -H 'Authorization: Bearer <YOUR_TOKEN_HERE>'
{ "confirmationId": "231241232" }
Occupancy values and dates for the hotel details.
List of occupancy details including the number of adults and children.
Local date and time represented in the ISO 8601 standard.
curl -i -X POST \ 'https://developer.spotnana.com/_mock/openapi/hotelapi/v2/hotel/pnrs/{pnrId}/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
Includes detailed specifications for a hotel, such as name, star rating, address, coordinates, amenities, and other information.
Postal Address Details
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.
Latitude and Longitude for a Location
Provides contact information for a 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.
Details about hotel star rating.
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 a hotel rate.
The source of the rate.
Rate details for hotel room
Money object containing details such as the amount, the currency code, and the converted amount.
Money object containing details such as the amount, the currency code, and the converted amount.
Tax breakdown
The type of rate.
The nightly rate for the room.
Money object containing details such as the amount, the currency code, and the converted amount.
Money object containing details such as the amount, the currency code, and the converted amount.
Tax breakdown
Indicates if CVV is required for payment.
Rate details for hotel room
Money object containing details such as the amount, the currency code, and the converted amount.
Money object containing details such as the amount, the currency code, and the converted amount.
Tax breakdown
Money object containing details such as the amount, the currency code, and the converted amount.
The supplier of the rate.
Rate details for hotel room
Rate details for hotel room
Money object containing details such as the amount, the currency code, and the converted amount.
Money object containing details such as the amount, the currency code, and the converted amount.
Tax breakdown
Rate details for hotel room
Money object containing details such as the amount, the currency code, and the converted amount.
Money object containing details such as the amount, the currency code, and the converted amount.
Tax breakdown
Money object containing details such as the amount, the currency code, and the converted amount.
A list of amenities included with the rate.
Cancellation policy for the PNR
Includes detailed information about a policy, such as its unique identifier, type, name, rules, version, and approval type.
Identifier of an object
Policy type.
Information about the policy rules.
The type of guarantee required for the rate.
Information about the room.
Room Type
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.
Local date and time represented in the ISO 8601 standard.
Contains statistical information about hotel search results.
{ "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
User identifier
Full name containing first, middle, last (family) names, and suffix.
Suffix for name
Properly formatted phone number.
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://developer.spotnana.com/_mock/openapi/hotelapi/v2/hotel/pnrs/{pnrId}/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" } } }'
{ "pnrId": "7373737373", "pnrStatus": "CONFIRMED", "externalPnrId": "ABC123" }