Geo Search Engine Results Page
https://api.worldota.net/api/b2b/v3/search/serp/geo/'
Search Engine Results Page (SERP) - this is for the preliminary search of a hotel with available accommodation that meets the given search conditions. It is not recommended to let the users choose the rates from this method (a full match with results from the Hotelpage request is not expected).
Request example
curl --location 'https://api.worldota.net/api/b2b/v3/search/serp/geo/' \
--header 'Content-Type: application/json' \
--data '{
"checkin": "2020-04-25",
"checkout": "2020-04-26",
"residency": "gb",
"language": "en",
"guests": [
{
"adults": 2,
"children": []
}
],
"longitude": 13.38886,
"latitude": 52.517036,
"radius": 100,
"currency": "EUR"
}'
Request body
Currency of the rooms’ price in the response.
If no currency is specified or the default value is set, then the actual currency requested is the contract’s currency for prepay rates.
It influences show_amount and show_currency_amount only.
default: Contract’s currency
The language.
- The default value is the contract language.
- The possible values:
ar
—Arabic.bg
–Bulgarian.cs
–Czech.de
–German.el
–Greek.en
–English.es
–Spanish.fr
–French.he
–Hebrew.hu
–Hungarian.it
–Italian.ja
–Japanese.kk
–Kazakh.ko
–Korean.nl
–Dutch.pl
–Polish.pt
–Portuguese.pt_PT
–Portuguese (Portugal).ro
–Romanian.ru
–Russian.sq
–Albanian.sr
–Serbian.th
–Thai.tr
–Turkish.uk
–Ukrainian.vi
–Vietnamese.zh_CN
–Simplified Chinese.
Radius size for circular search (in meters).
- The minimum value is
1
. - The maximum value is
70000
.
Guest’s (or multiple guests’) citizenship.
This is recommended for usage if there are doubts regarding a country’s/hotel’s policy towards citizens of a specific country.
Value’s standard = ISO 3166-1 alpha-2
, the value shall be transferred in lower case, number of the value’s symbols = 2
.
(could be required for some partners)
The maximum amount of time (in seconds) within which searched for rates will be returned.
- The maximum value is
100
.
The list of guests in the rooms.
The maximum number of rooms per request, which is 9 (one object corresponds to one room).
In case of multiroom search, for each room equal pax numbers are highly recommended for usuge. If different pax numbers are required, we recommend that you make a separate request for each room.
Whether or not additional services are needed.
Response
Information about the found hotel and its rates.
BarPriceData.
RoomGroupsBarPriceData.
Type of hotel room.
rg_ext
can be used to obtain extra information about the room from the hotel’s static information (room images, description etc.).
The unique hotel identifier.
- Either this field or the
hid
field is required.
The most preferred hotel ID.
- Either this field or the
id
field is required. - The maximum length is
7
characters.
List of available rates at the hotel.
List of amenities in the room.
There is a request which returns all available room amenities and definitions (room_amenities key):
Unique identifier of the rate. This value is passed to booking API method to identify a selected rate.
book_hash
key’s value can be transferred via the Order Booking Form method within 6 hours after the corresponding rate was returned in the search results. Exceeding this limit will return an error with error.slug
containing a “rate_not_found
” value.
The deposit information of the order. Has a value if the rate payment_types.type
field has the hotel
value.
The match_hash
field of the rate from the call made by the SERP mechanism.
Use this field if you are:
- Showing rates to the users from the call made by the SERP mechanism.
- Making a booking from these rates.
- Using this call response as actual data on the rate.
- Using this call response to actualize the exact rate from the calls made by the SERP mechanism.
Usage of this field can help the ETG collect analytics for SERP-HP matching.
Meal type in the rate.
There is a request which returns all available meals and definitions (meals
key):
https://api.worldota.net/api/b2b/v3/hotel/static/
If there is no meal type provided by the rate’s source, nomeal
value is displayed.
No-show penalty information.
Accepted payment options, with specified amount to be charged, transferred as an object with key-value pairs payment_options.payment_types
.
Please note that for a reservation, namely the specified sum (with the given currency) shall be paid.
Array with accepted payment option for the requested rate.
currency_code
).
Rate’s cancellation rules with commission information.
Date when free cancellation policy expires (may return null - no free cancellation).
Timezone is UTC+0.
Cancellation policies’ breakdown by time periods.
Commission information.
Date when this particular cancellation policy expires (null means all the time from start_at
till check in).
Timezone is UTC+0.
If start_at == end_at == null
then this particular cancellation policy has no time restrictions / is in effect all the time.
Commission information.
Additional service information: early check-in / late check-out.
Additional service type.
Free cancellation policy of upsell equals to the cancellation policy of the rate and should be parsed from “cancellation_penalties”.“free_cancellation_before”. Upsell cancellation policy does not have cancellation policies’ breakdown.
Commission information.
Additional service type.
Free cancellation policy of upsell equals to the cancellation policy of the rate and should be parsed from “cancellation_penalties”.“free_cancellation_before”. Upsell cancellation policy does not have cancellation policies’ breakdown.
Commission information.
The price below which the rate cannot be sold on b2c website. This price will be transferred only if you have signed an additional agreement with ETG, for details, you can contact your account manager. If the agreement is not signed, a null will be transferred.
Information about taxes in the rate.
List of taxes, information about which is available for these rates.
Tax identifier at Emerging Travel Group.
There is a request which returns all available taxes and definitions (taxes
key):
Information about VAT in the rate.
Type of hotel room.
rg_ext
can be used to obtain extra information about the room from the hotel’s static information (room images, description etc.).
Structured room name in the selected language.
Information about restrictions on the final selling price for the client.
If this parameter is not null
, the final selling price should be within min_price
and max_price
(the amount is in the search currency).
Response example
{
"data": {
"hotels": [
{
"id": "access_international_hotel_annex",
"rates": [
{
"match_hash": "m-d580b80f-4189-5020-ba37-b0a73f4b67a3",
"daily_prices": [
"24.10"
],
"meal": "nomeal",
"payment_options": {
"payment_types": [
{
"amount": "1905.00",
"show_amount": "24.00",
"currency_code": "RUB",
"show_currency_code": "EUR",
"by": "credit_card",
"is_need_credit_card_data": true,
"is_need_cvc": true,
"type": "now",
"tax_data": {},
"cancellation_penalties": {
"policies": [
{
"start_at": null,
"end_at": "2020-06-23T17:00:00",
"amount_charge": "0.00",
"amount_show": "0.00"
},
{
"start_at": "2020-06-23T17:00:00",
"end_at": null,
"amount_charge": "1905.00",
"amount_show": "24.00"
}
],
"free_cancellation_before": "2020-06-23T17:00:00"
}
}
]
},
"rg_ext": {
"class": 3,
"quality": 2,
"sex": 0,
"bathroom": 2,
"bedding": 3,
"family": 0,
"capacity": 2,
"club": 0
},
"room_name": "Standard Double room (double bed)",
"room_name_info": null,
"serp_filters": [
"has_bathroom"
],
"allotment": null,
"amenities_data": [
"double",
"non-smoking",
"private-bathroom",
"window"
],
"any_residency": true,
"deposit": {
"amount": "270.00",
"currency_code": "EUR",
"is_refundable": false
},
"no_show": {
"amount": "270.00",
"currency_code": "EUR",
"from_time": "12:00:00"
},
"room_data_trans": {
"main_room_type": "Standard Double room",
"main_name": "Standard Double room",
"bathroom": null,
"bedding_type": "double bed",
"misc_room_type": null
}
}
]
},
{
"id": "rila_muam_castle_hotel",
"rates": [
{
"match_hash": "m-854d6b9f-82ee-56d8-bd0e-e585edec3a89",
"daily_prices": [
"31.33"
],
"meal": "nomeal",
"payment_options": {
"payment_types": [
{
"amount": "2199.00",
"show_amount": "27.00",
"currency_code": "RUB",
"show_currency_code": "EUR",
"by": "credit_card",
"is_need_credit_card_data": true,
"is_need_cvc": true,
"type": "now",
"tax_data": {},
"cancellation_penalties": {
"policies": [
{
"start_at": null,
"end_at": "2020-06-23T15:00:00",
"amount_charge": "0.00",
"amount_show": "0.00"
},
{
"start_at": "2020-06-23T15:00:00",
"end_at": null,
"amount_charge": "2199.00",
"amount_show": "27.00"
}
],
"free_cancellation_before": "2020-06-23T15:00:00"
}
}
]
},
"rg_ext": {
"class": 3,
"quality": 2,
"sex": 0,
"bathroom": 2,
"bedding": 3,
"family": 0,
"capacity": 2,
"club": 0
},
"room_name": "Standard Double room (double bed) (bed type is subject to availability)",
"serp_filters": [
"has_bathroom"
],
"allotment": 2,
"amenities_data": [
"double",
"non-smoking",
"private-bathroom",
"window"
],
"any_residency": false,
"deposit": null,
"no_show": {
"amount": "25.00",
"currency_code": "USD",
"from_time": "12:00:00"
},
"room_data_trans": {
"main_room_type": "Standard Double room",
"main_name": "Standard Double room",
"bathroom": null,
"bedding_type": "double bed",
"misc_room_type": "bed type is subject to availability"
}
}
]
},
{
"id": "alama_hotel_multipurpose",
"rates": [
{
"match_hash": "m-96a3ba8c-a183-5cac-8e56-7a268612g0537",
"daily_prices": [
"29.95"
],
"meal": "nomeal",
"payment_options": {
"payment_types": [
{
"amount": "2367.00",
"show_amount": "29.00",
"currency_code": "RUB",
"show_currency_code": "EUR",
"by": "credit_card",
"is_need_credit_card_data": true,
"is_need_cvc": true,
"type": "now",
"tax_data": {},
"cancellation_penalties": {
"policies": [
{
"start_at": null,
"end_at": "2020-06-24T17:00:00",
"amount_charge": "0.00",
"amount_show": "0.00"
},
{
"start_at": "2020-06-24T17:00:00",
"end_at": null,
"amount_charge": "2367.00",
"amount_show": "29.00"
}
],
"free_cancellation_before": "2020-06-24T17:00:00"
}
}
]
},
"rg_ext": {
"class": 3,
"quality": 6,
"sex": 0,
"bathroom": 2,
"bedding": 3,
"family": 0,
"capacity": 2,
"club": 0
},
"room_name": "Deluxe Double room (double bed)",
"serp_filters": [
"has_bathroom"
],
"allotment": 23,
"amenities_data": [
"double",
"non-smoking",
"private-bathroom",
"window"
],
"any_residency": true,
"deposit": null,
"no_show": null,
"room_data_trans": {
"main_room_type": "Deluxe Double room",
"main_name": "Deluxe Double room",
"bathroom": null,
"bedding_type": "double bed",
"misc_room_type": null
}
}
]
},
{
"id": "prestige_hotel_limited",
"rates": [
{
"match_hash": "m-e8ada8a5-16e7-543c-8497-4e52d7yuu672",
"daily_prices": [
"24.10"
],
"meal": "nomeal",
"payment_options": {
"payment_types": [
{
"amount": "1905.00",
"show_amount": "24.00",
"currency_code": "RUB",
"show_currency_code": "EUR",
"by": "credit_card",
"is_need_credit_card_data": true,
"is_need_cvc": true,
"type": "now",
"tax_data": {},
"cancellation_penalties": {
"policies": [
{
"start_at": null,
"end_at": "2020-06-23T17:00:00",
"amount_charge": "0.00",
"amount_show": "0.00"
},
{
"start_at": "2020-06-23T17:00:00",
"end_at": null,
"amount_charge": "1905.00",
"amount_show": "24.00"
}
],
"free_cancellation_before": "2020-06-23T17:00:00"
}
}
]
},
"rg_ext": {
"class": 3,
"quality": 2,
"sex": 0,
"bathroom": 2,
"bedding": 3,
"family": 0,
"capacity": 2,
"club": 0
},
"room_name": "Standard Double room (double bed)",
"serp_filters": [
"has_bathroom"
],
"allotment": null,
"amenities_data": [
"double",
"non-smoking",
"private-bathroom",
"window"
],
"any_residency": true,
"deposit": null,
"no_show": null,
"room_data_trans": {
"main_room_type": "Standard Double room",
"main_name": "Standard Double room",
"bathroom": null,
"bedding_type": "double bed",
"misc_room_type": null
}
}
]
},
{
"id": "chimcherry_hotel_limited",
"rates": [
{
"match_hash": "m-63d0c135-ca74-58ef-82a7-959346bb55y1",
"daily_prices": [
"24.10"
],
"meal": "nomeal",
"payment_options": {
"payment_types": [
{
"amount": "1905.00",
"show_amount": "24.00",
"currency_code": "RUB",
"show_currency_code": "EUR",
"by": "credit_card",
"is_need_credit_card_data": true,
"is_need_cvc": true,
"type": "now",
"tax_data": {},
"cancellation_penalties": {
"policies": [
{
"start_at": null,
"end_at": "2020-06-23T17:00:00",
"amount_charge": "0.00",
"amount_show": "0.00"
},
{
"start_at": "2020-06-23T17:00:00",
"end_at": null,
"amount_charge": "1905.00",
"amount_show": "24.00"
}
],
"free_cancellation_before": "2020-06-23T17:00:00"
}
}
]
},
"rg_ext": {
"class": 3,
"quality": 2,
"sex": 0,
"bathroom": 2,
"bedding": 3,
"family": 0,
"capacity": 2,
"club": 0
},
"room_name": "Standard Double room (double bed)",
"serp_filters": [
"has_bathroom"
],
"allotment": null,
"amenities_data": [
"double",
"non-smoking",
"private-bathroom",
"window"
],
"any_residency": true,
"deposit": null,
"no_show": null,
"room_data_trans": {
"main_room_type": "Standard Double room",
"main_name": "Standard Double room",
"bathroom": null,
"bedding_type": "double bed",
"misc_room_type": null
}
}
]
},
{
"id": "green_suites_villa",
"rates": [
{
"match_hash": "m-8313f2e4-524a-566b-9f11-be838d62x3f3",
"daily_prices": [
"48.39"
],
"meal": "nomeal",
"payment_options": {
"payment_types": [
{
"amount": "3396.00",
"show_amount": "42.00",
"currency_code": "RUB",
"show_currency_code": "EUR",
"by": "credit_card",
"is_need_credit_card_data": true,
"is_need_cvc": true,
"type": "now",
"tax_data": {},
"cancellation_penalties": {
"policies": [
{
"start_at": null,
"end_at": "2020-06-23T15:00:00",
"amount_charge": "0.00",
"amount_show": "0.00"
},
{
"start_at": "2020-06-23T15:00:00",
"end_at": null,
"amount_charge": "3396.00",
"amount_show": "42.00"
}
],
"free_cancellation_before": "2020-06-23T15:00:00"
}
}
]
},
"rg_ext": {
"class": 3,
"quality": 8,
"sex": 0,
"bathroom": 2,
"bedding": 3,
"family": 0,
"capacity": 2,
"club": 0
},
"room_name": "Executive Double room (double bed) (bed type is subject to availability)",
"serp_filters": [
"has_bathroom"
],
"allotment": 13,
"amenities_data": [
"double",
"non-smoking",
"private-bathroom",
"window"
],
"any_residency": false,
"deposit": null,
"no_show": {
"amount": "39.00",
"currency_code": "USD",
"from_time": "12:00:00"
},
"room_data_trans": {
"main_room_type": "Executive Double room",
"main_name": "Executive Double room",
"bathroom": null,
"bedding_type": "double bed",
"misc_room_type": "bed type is subject to availability"
}
}
]
},
{
"id": "kenfeli_international_palmbeach_hotel",
"rates": [
{
"match_hash": "m-598117c2-ce0c-54ee-a1c4-f222d2877559",
"daily_prices": [
"18.86"
],
"meal": "nomeal",
"payment_options": {
"payment_types": [
{
"amount": "1491.00",
"show_amount": "18.00",
"currency_code": "RUB",
"show_currency_code": "EUR",
"by": "credit_card",
"is_need_credit_card_data": true,
"is_need_cvc": true,
"type": "now",
"tax_data": {},
"cancellation_penalties": {
"policies": [
{
"start_at": null,
"end_at": "2020-06-23T17:00:00",
"amount_charge": "0.00",
"amount_show": "0.00"
},
{
"start_at": "2020-06-23T17:00:00",
"end_at": null,
"amount_charge": "1491.00",
"amount_show": "18.00"
}
],
"free_cancellation_before": "2020-06-23T17:00:00"
}
}
]
},
"rg_ext": {
"class": 3,
"quality": 6,
"sex": 0,
"bathroom": 2,
"bedding": 3,
"family": 0,
"capacity": 2,
"club": 0
},
"room_name": "Deluxe Double room (double bed)",
"serp_filters": [
"has_bathroom"
],
"allotment": null,
"amenities_data": [
"double",
"non-smoking",
"private-bathroom",
"window"
],
"any_residency": true,
"deposit": null,
"no_show": null,
"room_data_trans": {
"main_room_type": "Deluxe Double room",
"main_name": "Deluxe Double room",
"bathroom": null,
"bedding_type": "double bed",
"misc_room_type": null
}
}
]
}
],
"total_hotels": 7
},
"debug": {
"request": {
"checkin": "2020-06-25",
"checkout": "2020-06-26",
"residency": "gb",
"language": "en",
"guests": [
{
"adults": 2,
"children": []
}
],
"longitude": 13.38886,
"latitude": 52.517036,
"radius": 100,
"currency": "EUR"
},
"key_id": 1234,
"validation_error": null
},
"status": "ok",
"error": null
}
Errors
Invalid JSON
The error
field has the invalid_json_format
value. The debug.validation_error
field has the value specified in the headers below.
body_must_be_json
The passed JSON isn’t valid.
Invalid parameters or request body
For these, the error
field has the invalid_params
value. The debug.validation_error
field has the value specified in the headers below.
date should be ISO8601 (YYYY-MM-DD)
The passed checkin
and checkout
fields have an invalid format. The valid format is YYYY-MM-DD
.
checkin date must be current or future date
The checkin
field value is in the past. Provide the current or future date.
checkin date must be less than or equal to 730 days since today
The checkin
field value should be no later than 730 days from the day of the request.
checkout date must be less than or equal to %d days since today
The checkout
field value should be no later than 30 days from the checkin
field value.
checkout date must be after checkin date
The checkout
field value should be later than the checkin
field value.
checkout cannot be later than X days since checkin
The checkout
field value should be no later than 30 days from the checkin
field value.
residency is required
The residency
field is required.
residency must be one of X
The residency
field has an invalid format. The valid format is in the ISO 3166-1 alpha-2.
unknown currency
The currency field has an invalid format. The valid format is in the ISO 4217.
early checkin date must be equal checkin date
The upsells.early_checkin.time
field value should be the same as the checkin
field value.
late checkout date must be equal checkout date
The upsells.late_checkout.time
field value should be the same as the checkout
field value.
early checkin must be in datetime format
The checkin
field has an invalid format. The valid formats are:
2006-01-02
.2006-01-02 15:04
.2006-01-02T15:04
.2006-01-02 15:04:05
.2006-01-02T15:04:05
.2006-01-02T15:04:05-07:00
.2006-01-02T15:04:05Z07:00
.
late checkout must be in datetime format
The checkout
field has an invalid format. The valid formats are:
2006-01-02
.2006-01-02 15:04
.2006-01-02T15:04
.2006-01-02 15:04:05
.2006-01-02T15:04:05
.2006-01-02T15:04:05-07:00
.2006-01-02T15:04:05Z07:00
.
guests number must be positive
The guests
field value must be positive.
too many rooms, value should be no more than X
The item number of the guests
field must be between 1
and 9
.
adults number per room must be in range 1 to X inc
The adults
field value must be between 1
and 6
.
children number per room must be not greater then X
The children
field value must be between 1
and 4
.
child's age must be in range 0 to X incl
The age
field value must be between 0
and 17
.
radius is required
The radius
field is required.
radius must be in range 1 to X inc
The radius
field value is invalid. The valid value is between 1
and 70000
.
longitude is required
The longitude
field is required.
latitude is required
The latitude
field is required.
Internal search error
The error
field has the сore_search_error
value. The debug.validation_error
field has the null
value.
The error occurs if the ETG has:
- An internal search error.
- A geo search error.
The number of recurrent identical requests must be limited.