Read one hotel for the hotel page
Returns the content of a hotel for the page the user opens before checkout: description, photos, every room type, policies, facts and contact details, in camelCase (HotelInfo).
/api/v1/hotels/get_hotel_infoIt is the only content call that asks the supplier when FX-Port does not hold the hotel yet, and only for a single id (hotel_id): use it for the ids of missing_hotel_ids. With hotel_ids it returns only the hotels already cached and leaves out the others; an unknown single id answers 404 hotel_not_found. With detail_level=minimal the answer is the compact card instead, which is what a result list needs. A hotel is looked up by its FX-Port id, then by its numeric supplier id (hid). Cached content is English whatever language you send; language only applies to the live fetch. The full document is 5 to 143 KB per hotel (26 KB in the middle, 38 KB on average): cache it by hotel id.
curl https://api.fx-port.com/api/v1/hotels/get_hotel_info \
-H "Authorization: Bearer fxp_test_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"hotel_id": "test_hotel_do_not_book",
"language": "en"
}'{
"environment": "sandbox",
"data": [
{
"id": "test_hotel_do_not_book",
"hid": 8473727,
"name": "Test Hotel (Do Not Book) test",
"kind": "Apartment",
"hotelChain": "No chain",
"isClosed": false,
"isGenderSpecificationRequired": false,
"address": "Avenida Roble, Frente al Mall Multiplaza, Tegucigalpa",
"postalCode": null,
"latitude": 14.079872,
"longitude": -87.21677,
"region": {
"id": 3421,
"name": "Tegucigalpa",
"countryCode": "HN",
"iata": "TGU",
"type": "City"
},
"starRating": 0,
"starCertificate": null,
"contact": {
"email": "[email protected]",
"phone": "+15555550123"
},
"checkIn": "14:00:00",
"checkOut": "12:00:00",
"frontDeskHours": {
"start": "00:00:00",
"end": "00:00:00"
},
"images": [
"https://cdn.worldota.net/t/{size}/extranet/b5/d3/b5d3d33394494c68321246882c1bd93a6832dcd5.jpeg"
],
"amenityGroups": [
{
"groupName": "General",
"amenities": [
"24-hour reception",
"Early check-in",
"Late check-out"
],
"paidAmenities": []
}
],
"serpFilters": [
"has_internet",
"has_parking",
"kitchen"
],
"descriptionStruct": [
{
"title": "Location",
"paragraphs": [
"A perfect fit for a big group of travellers: apartment «Test Hotel (Do Not Book)» ..."
],
"html": "<h3>Location</h3><p>A perfect fit for a big group of travellers ...</p>"
}
],
"metapolicyExtraInfo": "Front desk is open 24/7.",
"metapolicyStruct": {
"addFee": [],
"checkInCheckOut": [],
"children": [
{
"age_start": 0,
"age_end": 3,
"price": "500.00",
"currency": "CHF",
"extra_bed": "available"
}
],
"childrenMeal": [
{
"inclusion": "not_included",
"price": "200.00",
"currency": "USD",
"meal_type": "breakfast",
"age_start": 0,
"age_end": 5
}
],
"cot": [
{
"inclusion": "not_included",
"price": "0.00",
"currency": "USD",
"price_unit": "per_room_per_night",
"amount": 1
}
],
"deposit": [
{
"availability": "available",
"price": "123.00",
"currency": "HNL",
"price_unit": "per_room_per_stay",
"pricing_method": "fixed",
"payment_type": "cash",
"deposit_type": "unspecified"
}
],
"extraBed": [
{
"inclusion": "not_included",
"price": "100.00",
"currency": "ALL",
"price_unit": "per_guest_per_night",
"amount": 1
}
],
"internet": [
{
"inclusion": "included",
"price": "0.00",
"currency": null,
"price_unit": "unspecified",
"internet_type": "unspecified",
"work_area": "hotel"
}
],
"meal": [
{
"inclusion": "not_included",
"price": "300.00",
"currency": "USD",
"meal_type": "breakfast"
}
],
"noShow": {
"availability": "available",
"time": "09:00:00",
"day_period": "after_midday"
},
"parking": [
{
"inclusion": "not_included",
"price": "100.00",
"currency": "USD",
"price_unit": "per_car_per_night",
"territory_type": "unspecified"
}
],
"pets": [
{
"inclusion": "not_included",
"price": "560.00",
"currency": "USD",
"price_unit": "per_room_per_stay",
"pets_type": "unspecified"
}
],
"shuttle": [
{
"inclusion": "not_included",
"price": "100.00",
"currency": "EUR",
"shuttle_type": "one_way",
"destination_type": "train"
}
],
"visa": {
"visa_support": "support_enable"
}
},
"roomGroups": [
{
"roomGroupId": 95,
"name": "Standard Double room full double bed",
"nameStruct": {
"mainName": "Standard Double room",
"beddingType": "full double bed",
"bathroom": "shared bathroom"
},
"images": [
"https://cdn.worldota.net/t/{size}/extranet/b5/d3/b5d3d33394494c68321246882c1bd93a6832dcd5.jpeg"
],
"roomAmenities": [
"bath",
"heating"
],
"roomClass": "room",
"quality": "standard",
"bathroom": "private-bathroom",
"hasPrivateBathroom": true,
"capacity": 2,
"balcony": false,
"view": null,
"floor": null,
"bedrooms": null,
"beddingType": "double-bed",
"isFamily": false,
"isClub": false,
"genderRestriction": null
}
],
"facts": {
"floorsNumber": null,
"roomsNumber": null,
"yearBuilt": null,
"yearRenovated": null,
"electricity": {
"voltage": [],
"frequency": [
60
],
"sockets": [
"a",
"b"
]
}
},
"paymentMethods": [
"visa",
"maestro",
"cash"
],
"keysPickup": {
"type": "lockbox",
"isContactless": true,
"email": "[email protected]",
"phone": "+15555550123",
"officeAddress": null,
"extraInfo": "The keys are in the box by the front door."
}
}
]
}{
"environment": "sandbox",
"data": [
{
"id": "test_hotel_do_not_book",
"hid": 8473727,
"name": "Test Hotel (Do Not Book) test",
"kind": "Apartment",
"address": "Avenida Roble, Frente al Mall Multiplaza, Tegucigalpa",
"latitude": 14.079872,
"longitude": -87.21677,
"postal_code": null,
"region": {
"id": 3421,
"country_code": "HN",
"iata": "TGU",
"name": "Tegucigalpa",
"type": "City",
"type_v2": "city"
},
"star_rating": 0,
"images": [
"https://cdn.worldota.net/t/{size}/extranet/b5/d3/b5d3d33394494c68321246882c1bd93a6832dcd5.jpeg",
"https://cdn.worldota.net/t/{size}/extranet/15/44/15440558c952ec4c3488730d1563dc9e8d25832c.JPEG"
],
"serp_filters": [
"has_internet",
"has_parking",
"has_spa",
"has_pets",
"has_jacuzzi",
"kitchen"
],
"amenity_groups": [
{
"amenities": [
"24-hour reception",
"Early check-in",
"Late check-out"
],
"non_free_amenities": [],
"group_name": "General"
},
{
"amenities": [
"Concierge services",
"Dry-cleaning",
"Shoe shine"
],
"non_free_amenities": [
"Dry-cleaning",
"Shoe shine"
],
"group_name": "Services and amenities"
}
]
}
]
}{
"environment": "sandbox",
"data": []
}Request
Body
Required, JSON.
hotel_idstringOne hotel: its FX-Port id, or its numeric supplier id (hid, a JSON integer or digits). Only one id gets a live fetch when the hotel is not cached.
hotel_idsarray of stringSeveral hotels, at most 200. Only hotels already cached are returned (no live fetch). Wins over hotel_id.
At most 200 items.
detail_levelstringfull (default) returns the whole document, minimal (alias mini) the compact card for result lists.
One of full, minimal, mini. Default full.
images_limitintegerWith detail_level minimal: keep only the first N photos of each hotel, 0 to 30. A whole number written as text is read as the number.
Between 0 and 30.
languagestringLanguage of the live fetch of an uncached hotel. A cached hotel is English whatever you send.
Default en.
hotelIdstringdeprecatedLegacy name, still accepted. Use hotel_id instead.
One hotel id, in its older spelling. Use hotel_id.
idstringdeprecatedLegacy name, still accepted. Use hotel_id instead.
One hotel id, in an older spelling. Use hotel_id.
hidstringdeprecatedLegacy name, still accepted. Use hotel_id instead.
The supplier's numeric hotel id, in an older spelling. Use hotel_id, which takes it as well.
hotelIdsarray of stringdeprecatedLegacy name, still accepted. Use hotel_ids instead.
Several hotel ids, in their older spelling. Use hotel_ids.
idsarray of stringdeprecatedLegacy name, still accepted. Use hotel_ids instead.
Several hotel ids, in an older spelling. Use hotel_ids.
detailLevelstringdeprecatedLegacy name, still accepted. Use detail_level instead.
The detail level, in its older spelling. Use detail_level.
imagesLimitintegerdeprecatedLegacy name, still accepted. Use images_limit instead.
The photo limit, in its older spelling. Use images_limit.
Response
200The hotels that were found, in data. An empty list when none of several ids is cached.
environmentstringThe environment of the key that made the call: sandbox for fxp_test_ keys, live for fxp_live_ keys. Present in every JSON body.
One of sandbox, live.
request_idstringThe id of the request, also in the X-Request-Id header.
warningsarray of objectPresent only when the request used a previous spelling of a field or something the endpoint ignored.
ShowHide 5 attributes
codestringWhat the warning is about.
One of deprecated_field, ignored_field, coerced_value, deprecated_value, deprecated_endpoint.
fieldstringThe request field the warning is about.
replacementstringThe name to use instead, for deprecated_* warnings.
messagestringA sentence that says what happened and what to do.
documentation_urlstringWhere the naming rules are explained.
dataarray of objectThe hotels that were found, in no particular order: full camelCase documents (HotelInfo), or compact cards (HotelMini, snake_case) with detail_level minimal. Hotels that are not found are left out: the list is empty when none is.
Errors
| Status | Code | Example message |
|---|---|---|
| 400 | missing_field | Hotel IDs are required (hotelId or hotelIds) |
| 400 | invalid_hotel_ids | 'hotel_ids' must be a list of hotel ids. |
| 400 | too_many_ids | At most 200 hotel ids per request. |
| 400 | invalid_images_limit | 'images_limit' must be an integer from 0 to 30. |
| 404 | hotel_not_found | No hotel with this id exists at the supplier. |
| 429 | supplier_rate_limited | The hotel supplier is receiving too many requests. Retry in a minute. |
| 502 | supplier_error | The hotel supplier could not process the request right now. Retry in a few minutes. |
| 502 | supplier_invalid_response | The hotel supplier returned an answer that could not be used. Retry in a few minutes. |
| 503 | supplier_unavailable | The hotel supplier could not be reached. Retry in a few minutes. |
| 503 | supplier_timeout | The hotel supplier did not answer in time, so the request may or may not have been processed: read the booking's status before you retry. |
| 503 | supplier_busy | The supplier is temporarily at capacity; retry after the time given in the Retry-After header. |
The shape of the error body depends on the endpoint. See Errors for every shape and code.