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.
- Validate rebooking for price optimization
Hotel API (v2)
List of occupancy details including the number of adults and children.
Criteria used for searching hotels. The searchType field can contain one criteria per request.
- Sandbox URLhttps://api-ext-sboxmeta.partners.spotnana.com/v2/hotel/search
- Spotnana mock serverhttps://developer.spotnana.com/_mock/openapi/hotelapi/v2/hotel/search
- curl
- JavaScript
- Node.js
- Python
curl -i -X POST \
https://api-ext-sboxmeta.partners.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.
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.
List of phone numbers for the hotel.
two digit country code
List of hotel amenities.
Amenity description
List of property types for the hotel.
Indicates if the hotel has negotiated rates.
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).
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).
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).
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.
A list of available hotel chains.
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).
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.
{ "hotels": [ { … } ], "metadata": { "availableHotelChains": [ … ], "rateStatistics": { … }, "showOnlyBaseFare": false, "sessionId": "string" }, "paginationParams": { "nextPageToken": "string", "currentPageSize": 10 } }
- Sandbox URLhttps://api-ext-sboxmeta.partners.spotnana.com/v2/hotel/details
- Spotnana mock serverhttps://developer.spotnana.com/_mock/openapi/hotelapi/v2/hotel/details
- curl
- JavaScript
- Node.js
- Python
curl -i -X POST \
https://api-ext-sboxmeta.partners.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
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.
List of phone numbers for the hotel.
List of hotel amenities.
Amenity description
List of property types for the hotel.
List of available rooms in the hotel.
A list of rate options available for the hotel room.
Information about the beds in the room.
The source of the rate.
The nightly rate for the room.
Indicates if CVV is required for payment.
A list of amenities included with the rate.
Information about the policy rules.
The type of guarantee required for the rate.
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.
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.
List of occupancy details including the number of adults and children.
{ "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": [ { … } ] }
Request
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.
- Sandbox URLhttps://api-ext-sboxmeta.partners.spotnana.com/v2/hotel/price-check
- Spotnana mock serverhttps://developer.spotnana.com/_mock/openapi/hotelapi/v2/hotel/price-check
- curl
- JavaScript
- Node.js
- Python
curl -i -X POST \
https://api-ext-sboxmeta.partners.spotnana.com/v2/hotel/price-check \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"priceValidateKey": "string",
"tripId": "string"
}'OK
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).
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 } }
Request
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
- Sandbox URLhttps://api-ext-sboxmeta.partners.spotnana.com/v2/hotel/validate-rebooking
- Spotnana mock serverhttps://developer.spotnana.com/_mock/openapi/hotelapi/v2/hotel/validate-rebooking
- curl
- JavaScript
- Node.js
- Python
curl -i -X POST \
https://api-ext-sboxmeta.partners.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",
"linked": false
}
],
"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.
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.
Unique identifier identifying this payment source.
Raw Details of the Payment Source
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.
- Sandbox URLhttps://api-ext-sboxmeta.partners.spotnana.com/v2/hotel/create-pnr
- Spotnana mock serverhttps://developer.spotnana.com/_mock/openapi/hotelapi/v2/hotel/create-pnr
- curl
- JavaScript
- Node.js
- Python
curl -i -X POST \
https://api-ext-sboxmeta.partners.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",
"linked": false
},
"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",
"includeLocations": [
"APPROVAL_EMAILS"
],
"selectedOptions": [
{
"name": "string",
"description": "string",
"additionalUserInput": "string",
"additionalInfos": [
"string"
],
"additionalInfoConfigs": [
{
"type": "VARIABLE",
"name": "LLF"
}
]
}
]
}
]
}'{ "pnrId": "7373737373", "pnrStatus": "SUCCESS", "externalPnrId": "ABC123" }
- Sandbox URLhttps://api-ext-sboxmeta.partners.spotnana.com/v2/hotel/pnrs/{pnrId}/cancel-pnr
- Spotnana mock serverhttps://developer.spotnana.com/_mock/openapi/hotelapi/v2/hotel/pnrs/{pnrId}/cancel-pnr
- curl
- JavaScript
- Node.js
- Python
curl -i -X POST \
https://api-ext-sboxmeta.partners.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",
"includeLocations": [
"APPROVAL_EMAILS"
],
"selectedOptions": [
{
"name": "string",
"description": "string",
"additionalUserInput": "string",
"additionalInfos": [
"string"
],
"additionalInfoConfigs": [
{
"type": "VARIABLE",
"name": "LLF"
}
]
}
]
}
]
}'{ "confirmationId": "231241232" }
List of occupancy details including the number of adults and children.
- Sandbox URLhttps://api-ext-sboxmeta.partners.spotnana.com/v2/hotel/pnrs/{pnrId}/modify-details
- Spotnana mock serverhttps://developer.spotnana.com/_mock/openapi/hotelapi/v2/hotel/pnrs/{pnrId}/modify-details
- curl
- JavaScript
- Node.js
- Python
curl -i -X POST \
https://api-ext-sboxmeta.partners.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
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.
List of phone numbers for the hotel.
List of hotel amenities.
Amenity description
List of property types for the hotel.
List of available rooms in the hotel.
A list of rate options available for the hotel room.
Information about the beds in the room.
The source of the rate.
The nightly rate for the room.
Indicates if CVV is required for payment.
A list of amenities included with the rate.
Information about the policy rules.
The type of guarantee required for the rate.
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.
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.
List of occupancy details including the number of adults and children.
{ "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
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.
- Sandbox URLhttps://api-ext-sboxmeta.partners.spotnana.com/v2/hotel/pnrs/{pnrId}/modify-book
- Spotnana mock serverhttps://developer.spotnana.com/_mock/openapi/hotelapi/v2/hotel/pnrs/{pnrId}/modify-book
- curl
- JavaScript
- Node.js
- Python
curl -i -X POST \
https://api-ext-sboxmeta.partners.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",
"linked": false
},
"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",
"includeLocations": [
"APPROVAL_EMAILS"
],
"selectedOptions": [
{
"name": "string",
"description": "string",
"additionalUserInput": "string",
"additionalInfos": [
"string"
],
"additionalInfoConfigs": [
{
"type": "VARIABLE",
"name": "LLF"
}
]
}
]
}
]
}'{ "pnrId": "7373737373", "pnrStatus": "CONFIRMED", "externalPnrId": "ABC123" }