# Prebook rate from search step

URL: https://docs.emergingtravel.com/docs/affiliate-api/hotel-search/prebook-rate-from-search-step/

Tags: affiliate

---


> [!NOTE]
> This call is available upon request. Please contact our API support team to gain access.




**Sandbox**

```
https://api-sandbox.worldota.net/api/b2b/v3/serp/prebook/
```

**Production**

```
https://api.worldota.net/api/b2b/v3/serp/prebook/
```




> [!NOTE]
> * This call is recommended.
> * If method is not used:
>   * The risk of receiving a soldout error at the booking stage increases.
>   * The order confirmation process will take longer.
> * Request this call right after the SERP calls withing 38 minutes.



The call checks if the requested rate is still available before it can be booked and improves the booking success rate:

* When the original rate is not available, the system searches only for alternative rates of the same room type and board type (e.g., switching between refundable and non-refundable conditions within the `price_increase_percent` limit). The search does not extend to different room types or board types. If an alternative rate is found, new `book_hash` and `match_hash` values are returned.
* In cases where the same rate cannot be found and a price increase is permitted via the `price_increase_percent` field. The call will attempt to find the same room and board type at an increased price, but not exceeding the allowed percentage. The value in the `payment_options` field may change.

> [!NOTE]
> The limitations:
> * The recommended call timeout is 60 seconds.
> * The minimum call timeout is 30 seconds.



## Sandbox limitations { #limitations }

> [!WARNING]
> Use only field values, IDs, API keys, and any static content from the sandbox environment within the sandbox. <strong>Do not use sandbox data in test or production environments, and do not mix data or configuration between different environments.</strong>




* The maximum number of items in `hotels.rates` is `5`.
* The following fields are not supported:
  * `hotels.rates.payment_options.payment_types.cancellation_penalties.policies.commission_info.charge.amount_gross`
  * `hotels.rates.payment_options.payment_types.cancellation_penalties.policies.commission_info.charge.amount_commission`
* The following errors are not supported: `no_available_rates`, `unknown`.

## Request example


**Sandbox**

```shell
curl --user '<KEY_ID>:<API_KEY>' 'https://api-sandbox.worldota.net/api/b2b/v3/serp/prebook/' \
--header 'Content-Type: application/json' \
--data '{
    "hash": "sr-019a3ae6-0160-7945-9f6d-516791a39260",
    "price_increase_percent": 20
}'
```

**Production**

```shell
curl --user '<KEY_ID>:<API_KEY>' 'https://api.worldota.net/api/b2b/v3/serp/prebook/' \
--header 'Content-Type: application/json' \
--data '{
    "hash": "sr-019a3ae6-0160-7945-9f6d-516791a39260",
    "price_increase_percent": 20
}'
```




## Request body



- **hash** *(String, required)*

  <p>The unique rate ID.</p>
  > [!NOTE]
  > * Get this value from the `search_hash` field of the calls:
  >   * [Search by hotel IDs](/docs/affiliate-api/hotel-search/search-by-hotel-ids/).
  >   * [Search by geo coordinates](/docs/affiliate-api/hotel-search/search-by-geo-coordinates/).
  >   * [Search by region](/docs/affiliate-api/hotel-search/search-by-region/).
  > * Use this value within 6 hours after you have got the rate.
  > * The minimum length is `1` character.
  > * The maximum length is `256` characters.


- **price_increase_percent** *(Int, optional)*

  <p>The percentage by which the new price can be higher than the original price.</p>
  <p>For example, if you send <code>price_increase_percent=20</code> and the starting price is 1,000, the maximum allowed price for this pre-book call is 1,200.</p>
  <p>If the value isn’t provided, the API will try to rebook with the same price or lower.</p>
  > [!NOTE]
  > * The minimum value is `0`.
  > * The maximum value is `100`.





## Response



[//]: # (total_hotels)
- **total_hotels** *(Int)*

  <p>The total number of unique hotels.</p>


[//]: # (changes)
- **changes** *(Object)*

  <p>The rate price change information.</p>
  <ul>
  <li>
  <p><strong>price_changed</strong> <em>(Boolean)</em></p>
  <p>Whether the rate price is changed or not.</p>
  </li>
  </ul>


[//]: # (hotels)
- **hotels** *([Object])*

  <p>The list of hotels and their rates.</p>
  <ul>
  <li>
  <p><strong>id</strong> <em>(String, deprecated)</em></p>
  <p>The unique hotel ID in the legacy string format.</p>
  > [!NOTE]
  > * Either this field or the `hid` field is required.
  </li>
  <li>
  <p><strong>hid</strong> <em>(Int)</em></p>
  <p>The unique hotel ID in the new numeric format.</p>
  > [!NOTE]
  > * Each ID is an integer no longer than 10 digits.
  > * We are gradually migrating all clients to use this format.
  </li>
  <li>
  <p><strong>rates</strong> <em>([Object])</em></p>
  <p>The list of available hotel rates.</p>
  <ul>
  <li>
  <p><strong>allotment</strong> <em>(Int)</em></p>
  <p>The number of rooms available for the rate.</p>
  </li>
  <li>
  <p><strong>amenities_data</strong> <em>([String])</em></p>
  <p>The room amenity list.</p>
  <p>To get all available room amenities and their definitions, use the <code>room_amenities</code> field from the [Retrieve hotel static data](/docs/affiliate-api/static-content/retrieve-hotel-static-data/)
   call.</p>
  </li>
  <li>
  <p><strong>any_residency</strong> <em>(Boolean)</em></p>
  <p>Whether the rate is allowed to be booked by the guest with any kind of residency or not.</p>
  <p>Use it if you don’t collect the guests’ residency.</p>
  </li>
  <li>
  <p><strong>book_hash</strong> <em>(String)</em></p>
  <p>The unique rate ID used to identify the selected rate.</p>
  > [!NOTE]
  > * Use this value in the `book_hash` field of the [Create booking process](/docs/affiliate-api/booking/create-booking-process/) call.
  > * The value lifetime is 6 hours after you have got the rate from the search results.
  </li>
  <li>
  <p><strong>daily_prices</strong> <em>([String])</em></p>
  <p>The list of daily rate prices breakdown in the request currency.</p>
  </li>
  <li>
  <p><strong>deposit</strong> <em>(Object)</em></p>
  <p>The deposit information of the order.</p>
  <p>Has a value if the rate <code>payment_types.type</code> field has the <code>hotel</code> value.</p>
  <ul>
  <li>
  <p><strong>amount</strong> <em>(String)</em></p>
  <p>The deposit amount in the currency specified by the <code>currency_code</code> field.</p>
  </li>
  <li>
  <p><strong>currency_code</strong> <em>(String)</em></p>
  <p>The deposit amount currency code. Is the same as the charged (hotel) currency code.</p>
  </li>
  <li>
  <p><strong>is_refundable</strong> <em>(Boolean)</em></p>
  <p>Whether the deposit is refundable or not.</p>
  </li>
  </ul>
  </li>
  <li>
  <p><strong>match_hash</strong> <em>(String)</em></p>
  <p>The <code>match_hash</code> field of the rate from the call made by the SERP mechanism.</p>
  <p>Use this field if you are:</p>
  <ul>
  <li>Showing rates to the users from the call made by the [SERP mechanism](/docs/glossary/#search-engine-results-page)
  .</li>
  <li>Making a booking from these rates.</li>
  <li>Using this call response as actual data on the rate.</li>
  <li>Using this call response to actualize the exact rate from the calls made by the SERP mechanism.</li>
  </ul>
  <p>Usage of this field can help the ETG collect analytics for SERP-HP matching.</p>
  </li>
  <li>
  <p><strong>meal</strong> <em>(String, deprecated)</em></p>
  <blockquote>
  <p>[!WARNING]
  Use the <code>meal_data</code> field instead.</p></blockquote>
  <p>The meal type.</p>
  <p>If there is no meal type provided by the rate source, the <code>nomeal</code> value is returned.</p>
  <p>To get all available meals and their definitions, use the <code>meals</code> field from the [Retrieve hotel static data](/docs/affiliate-api/static-content/retrieve-hotel-static-data/)
   call.</p>
  </li>
  <li>
  <p><strong>meal_data</strong> <em>(Object)</em></p>
  <p>The rate meals information.</p>
  <ul>
  <li>
  <p><strong>value</strong> <em>(String)</em></p>
  <p>The meal type in the rate.</p>
  <p>To get all available meal types and their definitions, use the <code>meals</code> field from the [Retrieve hotel static data](/docs/affiliate-api/static-content/retrieve-hotel-static-data/)
   call.</p>
  <p>Has the <code>nomeal</code> value if no meal type is provided.</p>
  </li>
  <li>
  <p><strong>has_breakfast</strong> <em>(Boolean)</em></p>
  <p>Whether breakfast is included to the rate or not.</p>
  </li>
  <li>
  <p><strong>no_child_meal</strong> <em>(Boolean)</em></p>
  <p>Whether the children meal is absent in the rate or not.</p>
  </li>
  </ul>
  </li>
  <li>
  <p><strong>no_show</strong> <em>(Object)</em></p>
  <p>The no-show penalty information.</p>
  <ul>
  <li>
  <p><strong>amount</strong> <em>(String)</em></p>
  <p>The no-show penalty amount in the currency specified by the <code>currency_code</code> field.</p>
  </li>
  <li>
  <p><strong>currency_code</strong> <em>(String)</em></p>
  <p>The no-show penalty amount currency code. Is the same as the charged (hotel) currency code.</p>
  </li>
  <li>
  <p><strong>from_time</strong> <em>(String)</em></p>
  <p>The time in the hotel timezone from which the no-show penalty is charged, in <code>HH:MM:SS</code> format (24-hour).</p>
  </li>
  </ul>
  </li>
  <li>
  <p><strong>payment_options</strong> <em>(Object)</em></p>
  <p>The accepted payment options with the specified amount to be charged.</p>
  <p>For a booking, this amount in the requested currency should be paid.</p>
  <ul>
  <li>
  <p><strong>payment_types</strong> <em>(String)</em></p>
  <p>The list with accepted payment options.</p>
  <ul>
  <li>
  <p><strong>amount</strong> <em>(String)</em></p>
  <p>The amount to be charged for the booking in the contract currency code.</p>
  </li>
  <li>
  <p><strong>currency_code</strong> <em>(String)</em></p>
  <p>The amount currency code. Is the same as the charged (contract) currency code.</p>
  > [!NOTE]
  > If the `payment_types` is `hotel`, the hotel `currency_code` will be used here.
  </li>
  <li>
  <p><strong>by</strong> <em>(String)</em></p>
  <p>Whether the booking can be paid by a card or not.</p>
  > [!NOTE]
  > * The possible values:
  >   * `credit_card`
  >   * `null`
  </li>
  <li>
  <p><strong>cancellation_penalties</strong> <em>(String)</em></p>
  <p>The cancellation rules and commission information.</p>
  <ul>
  <li>
  <p><strong>free_cancellation_before</strong> <em>(String)</em></p>
  <p>The date and time when the free cancellation policy expires.</p>
  <p>Has the <code>null</code> value, if there is no free cancellation.</p>
  <p>The timezone is in UTC±0.</p>
  </li>
  <li>
  <p><strong>policies</strong> <em>(String)</em></p>
  <p>The cancellation policies breakdown by periods.</p>
  <ul>
  <li>
  <p><strong>amount_charge</strong> <em>(String)</em></p>
  <p>The cancellation penalty amount in the contract currency.</p>
  </li>
  <li>
  <p><strong>amount_show</strong> <em>(String)</em></p>
  <p>The cancellation penalty amount in the request currency.</p>
  </li>
  <li>
  <p><strong>end_at</strong> <em>(String)</em></p>
  <p>The date and time when this cancellation policy expires.</p>
  <p>Has the <code>null</code> value, if it is in the time from the <code>start_at</code> field value till check-in.</p>
  <p>If the <code>start_at</code> and <code>end_at</code> fields have the <code>null</code> value, this particular cancellation policy:</p>
  <ul>
  <li>Has no time restrictions.</li>
  <li>Is in effect all the time.</li>
  </ul>
  <p>The timezone is in UTC±0.</p>
  </li>
  <li>
  <p><strong>start_at</strong> <em>(String)</em></p>
  <p>The date and time when this cancellation policy takes effect.</p>
  <p>Has the <code>null</code> value, if it is in effect till the <code>end_at</code> field value.</p>
  <p>The timezone is in UTC±0.</p>
  </li>
  </ul>
  </li>
  </ul>
  </li>
  <li>
  <p><strong>is_need_credit_card_data</strong> <em>(Boolean)</em></p>
  <p>Whether the credit card information is needed or not.</p>
  </li>
  <li>
  <p><strong>is_need_cvc</strong> <em>(Boolean)</em></p>
  <p>Whether the CVC is needed or not.</p>
  </li>
  <li>
  <p><strong>type</strong> <em>(String)</em></p>
  <p>The payment type.</p>
  > [!NOTE]
  > * The possible values:
  >   * `now`. Use it to allow the user to pay for the booking via the ETG payment system:
  >     1. Request the [Create booking process](/docs/affiliate-api/booking/create-booking-process/) call and get the card details.
  >     1. Request the [Create credit card token](/docs/affiliate-api/booking/create-credit-card-token/) call with the card details.
  >   * `hotel`. Use it to allow the user to pay for the booking upon check-in at the hotel. The user won’t be charged now.
  >   * `deposit`. Use it to allow you to charge the user bank card for the booking by yourself:
  >     1. You need to keep your ETG deposit sufficient. To increase funds, contact your account manager.
  >     1. The user makes a booking.
  >     1. You charge the user bank card.
  >     1. The ETG writes funds from your deposit by themselves during the reporting period.
  </li>
  <li>
  <p><strong>show_amount</strong> <em>(String)</em></p>
  <p>The rate price in the request currency code of this object <code>show_currency_code</code> field value.</p>
  <p>Isn’t necessarily the sum in the charged or payment currency code.</p>
  </li>
  <li>
  <p><strong>show_currency_code</strong> <em>(String)</em></p>
  <p>The request currency code.</p>
  <p>Isn’t necessarily in the charged or payment currency code.</p>
  </li>
  <li>
  <p><strong>currency_code</strong> <em>(String)</em></p>
  <p>The amount currency code. Is the same as the charged (contract) currency code.</p>
  > [!NOTE]
  > If the `payment_types` is `hotel`, the hotel `currency_code` will be used here.
  </li>
  <li>
  <p><strong>tax_data</strong> <em>(Object)</em></p>
  <p>The tax information.</p>
  <ul>
  <li>
  <p><strong>taxes</strong> <em>(Object)</em></p>
  <p>The taxes list.</p>
  <ul>
  <li>
  <p><strong>amount</strong> <em>(String)</em></p>
  <p>The tax amount in the currency specified by the <code>currency_code</code> field.</p>
  </li>
  <li>
  <p><strong>currency_code</strong> <em>(String)</em></p>
  <p>The tax amount currency code in the [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217)
   format.</p>
  <blockquote>
  <p>[!NOTE]</p>
  <ul>
  <li>The length is <code>3</code> characters.</li>
  <li>The possible values:
  <ul>
  <li><code>AED</code>.</li>
  <li><code>AFN</code>.</li>
  <li><code>ALL</code>.</li>
  <li><code>AMD</code>.</li>
  <li><code>ANG</code>.</li>
  <li><code>AOA</code>.</li>
  <li><code>ARS</code>.</li>
  <li><code>AUD</code>.</li>
  <li><code>AWG</code>.</li>
  <li><code>AZN</code>.</li>
  <li><code>BAM</code>.</li>
  <li><code>BBD</code>.</li>
  <li><code>BDT</code>.</li>
  <li><code>BGN</code>.</li>
  <li><code>BHD</code>.</li>
  <li><code>BIF</code>.</li>
  <li><code>BMD</code>.</li>
  <li><code>BND</code>.</li>
  <li><code>BOB</code>.</li>
  <li><code>BOV</code>.</li>
  <li><code>BRL</code>.</li>
  <li><code>BSD</code>.</li>
  <li><code>BTN</code>.</li>
  <li><code>BWP</code>.</li>
  <li><code>BYR</code>.</li>
  <li><code>BYN</code>.</li>
  <li><code>BZD</code>.</li>
  <li><code>CAD</code>.</li>
  <li><code>CDF</code>.</li>
  <li><code>CHE</code>.</li>
  <li><code>CHF</code>.</li>
  <li><code>CHW</code>.</li>
  <li><code>CLF</code>.</li>
  <li><code>CLP</code>.</li>
  <li><code>CNY</code>.</li>
  <li><code>COP</code>.</li>
  <li><code>COU</code>.</li>
  <li><code>CRC</code>.</li>
  <li><code>CUC</code>.</li>
  <li><code>CUP</code>.</li>
  <li><code>CVE</code>.</li>
  <li><code>CZK</code>.</li>
  <li><code>DJF</code>.</li>
  <li><code>DKK</code>.</li>
  <li><code>DOP</code>.</li>
  <li><code>DZD</code>.</li>
  <li><code>EGP</code>.</li>
  <li><code>ERN</code>.</li>
  <li><code>ETB</code>.</li>
  <li><code>EUR</code>.</li>
  <li><code>FJD</code>.</li>
  <li><code>FKP</code>.</li>
  <li><code>GBP</code>.</li>
  <li><code>GEL</code>.</li>
  <li><code>GHS</code>.</li>
  <li><code>GIP</code>.</li>
  <li><code>GMD</code>.</li>
  <li><code>GNF</code>.</li>
  <li><code>GTQ</code>.</li>
  <li><code>GYD</code>.</li>
  <li><code>HKD</code>.</li>
  <li><code>HNL</code>.</li>
  <li><code>HRK</code>.</li>
  <li><code>HTG</code>.</li>
  <li><code>HUF</code>.</li>
  <li><code>IDR</code>.</li>
  <li><code>ILS</code>.</li>
  <li><code>INR</code>.</li>
  <li><code>IQD</code>.</li>
  <li><code>IRR</code>.</li>
  <li><code>ISK</code>.</li>
  <li><code>JMD</code>.</li>
  <li><code>JOD</code>.</li>
  <li><code>JPY</code>.</li>
  <li><code>KES</code>.</li>
  <li><code>KGS</code>.</li>
  <li><code>KHR</code>.</li>
  <li><code>KMF</code>.</li>
  <li><code>KPW</code>.</li>
  <li><code>KRW</code>.</li>
  <li><code>KWD</code>.</li>
  <li><code>KYD</code>.</li>
  <li><code>KZT</code>.</li>
  <li><code>LAK</code>.</li>
  <li><code>LBP</code>.</li>
  <li><code>LKR</code>.</li>
  <li><code>LRD</code>.</li>
  <li><code>LSL</code>.</li>
  <li><code>LTL</code>.</li>
  <li><code>LVL</code>.</li>
  <li><code>LYD</code>.</li>
  <li><code>MAD</code>.</li>
  <li><code>MDL</code>.</li>
  <li><code>MGA</code>.</li>
  <li><code>MKD</code>.</li>
  <li><code>MMK</code>.</li>
  <li><code>MNT</code>.</li>
  <li><code>MOP</code>.</li>
  <li><code>MRO</code>.</li>
  <li><code>MUR</code>.</li>
  <li><code>MVR</code>.</li>
  <li><code>MWK</code>.</li>
  <li><code>MXN</code>.</li>
  <li><code>MXV</code>.</li>
  <li><code>MYR</code>.</li>
  <li><code>MZN</code>.</li>
  <li><code>NAD</code>.</li>
  <li><code>NGN</code>.</li>
  <li><code>NIO</code>.</li>
  <li><code>NOK</code>.</li>
  <li><code>NPR</code>.</li>
  <li><code>NZD</code>.</li>
  <li><code>OMR</code>.</li>
  <li><code>PAB</code>.</li>
  <li><code>PEN</code>.</li>
  <li><code>PGK</code>.</li>
  <li><code>PHP</code>.</li>
  <li><code>PKR</code>.</li>
  <li><code>PLN</code>.</li>
  <li><code>PYG</code>.</li>
  <li><code>QAR</code>.</li>
  <li><code>RON</code>.</li>
  <li><code>RSD</code>.</li>
  <li><code>RUB</code>.</li>
  <li><code>RWF</code>.</li>
  <li><code>SAR</code>.</li>
  <li><code>SBD</code>.</li>
  <li><code>SCR</code>.</li>
  <li><code>SDG</code>.</li>
  <li><code>SEK</code>.</li>
  <li><code>SGD</code>.</li>
  <li><code>SHP</code>.</li>
  <li><code>SLL</code>.</li>
  <li><code>SOS</code>.</li>
  <li><code>SRD</code>.</li>
  <li><code>SSP</code>.</li>
  <li><code>STD</code>.</li>
  <li><code>SVC</code>.</li>
  <li><code>SYP</code>.</li>
  <li><code>SZL</code>.</li>
  <li><code>THB</code>.</li>
  <li><code>TJS</code>.</li>
  <li><code>TMT</code>.</li>
  <li><code>TND</code>.</li>
  <li><code>TOP</code>.</li>
  <li><code>TRY</code>.</li>
  <li><code>TTD</code>.</li>
  <li><code>TWD</code>.</li>
  <li><code>TZS</code>.</li>
  <li><code>UAH</code>.</li>
  <li><code>UGX</code>.</li>
  <li><code>USD</code>.</li>
  <li><code>USN</code>.</li>
  <li><code>USS</code>.</li>
  <li><code>UYI</code>.</li>
  <li><code>UYU</code>.</li>
  <li><code>UZS</code>.</li>
  <li><code>VEF</code>.</li>
  <li><code>VND</code>.</li>
  <li><code>VUV</code>.</li>
  <li><code>WST</code>.</li>
  <li><code>XAF</code>.</li>
  <li><code>XAG</code>.</li>
  <li><code>XAU</code>.</li>
  <li><code>XBA</code>.</li>
  <li><code>XBB</code>.</li>
  <li><code>XBC</code>.</li>
  <li><code>XBD</code>.</li>
  <li><code>XCD</code>.</li>
  <li><code>XDR</code>.</li>
  <li><code>XFU</code>.</li>
  <li><code>XOF</code>.</li>
  <li><code>XPD</code>.</li>
  <li><code>XPF</code>.</li>
  <li><code>XPT</code>.</li>
  <li><code>XSU</code>.</li>
  <li><code>XTS</code>.</li>
  <li><code>XUA</code>.</li>
  <li><code>YER</code>.</li>
  <li><code>ZAR</code>.</li>
  <li><code>ZMW</code>.</li>
  <li><code>ZWL</code>.</li>
  </ul>
  </li>
  </ul></blockquote>
  </li>
  <li>
  <p><strong>included_by_supplier</strong> <em>(Boolean)</em></p>
  <p>Whether the tax is included by the supplier or not.</p>
  <p>When it has:</p>
  <ul>
  <li>The <code>false</code> value, the tax is supposed to be paid at the hotel in this object currency.</li>
  <li>The <code>true</code> value, the tax is included in the price.</li>
  </ul>
  </li>
  <li>
  <p><strong>name</strong> <em>(String)</em></p>
  <p>The ETG tax ID.</p>
  <p>To get all available tax IDs and their definitions, use the <code>taxes</code> field from the [Retrieve hotel static data](/docs/affiliate-api/static-content/retrieve-hotel-static-data/)
   call.</p>
  </li>
  </ul>
  </li>
  </ul>
  </li>
  </ul>
  </li>
  </ul>
  </li>
  <li>
  <p><strong>rg_ext</strong> <em>(Object)</em></p>
  <p>The hotel room type.</p>
  <p>Use this field to get extra data on the room from the hotel static data. For example, room images, descriptions.</p>
  <ul>
  <li>
  <p><strong>balcony</strong> <em>(Int)</em></p>
  <p>Whether there is a balcony or not.</p>
  > [!NOTE]
  > The possible values:
  > * `0` — no balcony.
  > * `1` — a balcony.
  </li>
  <li>
  <p><strong>bathroom</strong> <em>(Int)</em></p>
  <p>The room bathroom information.</p>
  > [!NOTE]
  > The possible values:
  > * `0` — undefined.
  > * `1` — a shared bathroom.
  > * `2` — a private bathroom.
  > * `3` — an external private bathroom.
  </li>
  <li>
  <p><strong>bedding</strong> <em>(Int)</em></p>
  <p>The room bedding information.</p>
  > [!NOTE]
  > The possible values:
  > * `0` — undefined.
  > * `1` — a bunk bed.
  > * `2` — a single bed.
  > * `3` — a double bed.
  > * `4` — a twin bed.
  > * `7` — multiple beds.
  </li>
  <li>
  <p><strong>bedrooms</strong> <em>(Int)</em></p>
  <p>The bedroom number.</p>
  > [!NOTE]
  > The possible values:
  > * `0` — undefined.
  > * `1` — 1 bedroom.
  > * `2` — 2 bedrooms.
  > * `3` — 3 bedrooms.
  > * `4` — 4 bedrooms.
  > * `5` — 5 bedrooms.
  > * `6` — 6 bedrooms.
  </li>
  <li>
  <p><strong>capacity</strong> <em>(Int)</em></p>
  <p>The maximum number of main bed places without additional charges and excluding extra beds, cots, etc.</p>
  > [!NOTE]
  > The possible values:
  > * `0` — undefined.
  > * `1` — single.
  > * `2` — double.
  > * `3` — triple.
  > * `4` — quadruple.
  > * `5` — quintuple.
  > * `6` — sextuplet.
  </li>
  <li>
  <p><strong>class</strong> <em>(Int)</em></p>
  <p>The room class information.</p>
  > [!NOTE]
  > The possible values:
  > * `0` — run of house.
  > * `1` — dorm.
  > * `2` — capsule.
  > * `3` — room.
  > * `4` — junior suite.
  > * `5` — suite.
  > * `6` — apartment.
  > * `7` — studio.
  > * `8` — villa.
  > * `9` — cottage.
  > * `17` — bungalow.
  > * `18` — chalet.
  > * `19` — camping.
  > * `20` — tent.
  </li>
  <li>
  <p><strong>club</strong> <em>(Int)</em></p>
  <p>Whether it is a club room or not.</p>
  > [!NOTE]
  > The possible values:
  > * `0` — not a club room.
  > * `1` — a club room.
  </li>
  <li>
  <p><strong>family</strong> <em>(Int)</em></p>
  <p>Whether it is a family room or not.</p>
  > [!NOTE]
  > The possible values:
  > * `0` — not a family room.
  > * `1` — a family room.
  </li>
  <li>
  <p><strong>floor</strong> <em>(Int)</em></p>
  <p>The room floor Information.</p>
  > [!NOTE]
  > The possible values:
  > * `0` — undefined.
  > * `1` — a penthouse floor.
  > * `2` — a duplex floor.
  > * `3` — a basement floor.
  > * `4` — an attic floor.
  </li>
  <li>
  <p><strong>quality</strong> <em>(Int)</em></p>
  <p>The room quality information.</p>
  > [!NOTE]
  > The possible values:
  > * `0` — undefined.
  > * `1` — economy.
  > * `2` — standard.
  > * `3` — comfort.
  > * `4` — business.
  > * `5` — superior.
  > * `6` — deluxe.
  > * `7` — premier.
  > * `8` — executive.
  > * `9` — presidential.
  > * `17` — premium.
  > * `18` — classic.
  > * `19` — ambassador.
  > * `20` — grand.
  > * `21` — luxury.
  > * `22` — platinum.
  > * `23` — prestige.
  > * `24` — privilege.
  > * `25` — royal.
  </li>
  <li>
  <p><strong>sex</strong> <em>(Int)</em></p>
  <p>The room gender restrictions.</p>
  > [!NOTE]
  > The possible values:
  > * `0` — undefined.
  > * `1` — male.
  > * `2` — female.
  > * `3` — mixed.
  </li>
  <li>
  <p><strong>view</strong> <em>(Int)</em></p>
  <p>The room view information.</p>
  > [!NOTE]
  > The possible values:
  > * `0` — undefined.
  > * `1` — bay view.
  > * `2` — bosphorus view.
  > * `3` — burj-khalifa view.
  > * `4` — canal view.
  > * `5` — city view.
  > * `6` — courtyard view.
  > * `7` — dubai-marina view.
  > * `8` — garden view.
  > * `9` — golf view.
  > * `17` — harbour view.
  > * `18` — inland view.
  > * `19` — kremlin view.
  > * `20` — lake view.
  > * `21` — land view.
  > * `22` — mountain view.
  > * `23` — ocean view.
  > * `24` — panoramic view.
  > * `25` — park view.
  > * `26` — partial-ocean view.
  > * `27` — partial-sea view.
  > * `28` — partial view.
  > * `29` — pool view.
  > * `30` — river view.
  > * `31` — sea view.
  > * `32` — sheikh-zayed view.
  > * `33` — street view.
  > * `34` — sunrise view.
  > * `35` — sunset view.
  > * `36` — water view.
  > * `37` — with view.
  > * `38` — beachfront.
  > * `39` — ocean front.
  > * `40` — sea front.
  </li>
  </ul>
  </li>
  <li>
  <p><strong>room_data_trans</strong> <em>(Object)</em></p>
  <p>The room information in the request language.</p>
  <ul>
  <li>
  <p><strong>bathroom</strong> <em>(String)</em></p>
  <p>The room bathroom information.</p>
  <p>Has the <code>null</code> value, if it is a private bathroom.</p>
  </li>
  <li>
  <p><strong>bedding_type</strong> <em>(String)</em></p>
  <p>The room bedding information.</p>
  </li>
  <li>
  <p><strong>main_name</strong> <em>(String)</em></p>
  <p>The room name.</p>
  </li>
  <li>
  <p><strong>main_room_type</strong> <em>(String)</em></p>
  <p>The room type.</p>
  </li>
  <li>
  <p><strong>misc_room_type</strong> <em>(String)</em></p>
  <p>The room additional information.</p>
  </li>
  <li>
  <p><strong>beds</strong> <em>(Object)</em></p>
  <p>An array listing the types and quantities of beds available in the room.</p>
  > [!NOTE]
  > This field and its nested fields are **not available in the Sandbox environment**.
  <ul>
  <li>
  <p><strong>bed</strong> <em>(String)</em></p>
  <p>Type of bed.</p>
  </li>
  <li>
  <p><strong>count</strong> <em>(String)</em></p>
  <p>Quantity of this bed type.</p>
  </li>
  </ul>
  </li>
  </ul>
  </li>
  <li>
  <p><strong>legal_info</strong> <em>(Object)</em></p>
  <p>The hotel and service provider legal information.</p>
  > [!NOTE]
  > The information provided depends on the supplier of the specific rate.
  <p>Has the value different from <code>null</code> for only countries where it is mandatory to have this information.</p>
  <p>Has the <code>null</code> value for the calls made by the [SERP mechanism](/docs/glossary/#search-engine-results-page)
  .</p>
  <ul>
  <li>
  <p><strong>hotel</strong> <em>(Object)</em></p>
  <p>The hotel legal information.</p>
  <ul>
  <li>
  <p><strong>name</strong> <em>(String)</em></p>
  <p>The hotel legal name.</p>
  </li>
  <li>
  <p><strong>address</strong> <em>(String)</em></p>
  <p>The hotel legal address.</p>
  </li>
  <li>
  <p><strong>taxpayer_number</strong> <em>(String)</em></p>
  <p>The Taxpayer Personal Identification Number (INN) of the hotel.</p>
  > [!NOTE]
  > * The length is `10` characters.
  </li>
  <li>
  <p><strong>state_registration_number</strong> <em>(String)</em></p>
  <p>The State Registration Number for Companies (OGRN) of the hotel.</p>
  > [!NOTE]
  > * The length is `13` characters.
  </li>
  <li>
  <p><strong>work_time</strong> <em>(String)</em></p>
  <p>The hotel legal address working hours.</p>
  </li>
  </ul>
  </li>
  <li>
  <p><strong>provider</strong> <em>(Object)</em></p>
  <p>The service provider legal information.</p>
  <ul>
  <li>
  <p><strong>name</strong> <em>(String)</em></p>
  <p>The service provider legal name.</p>
  </li>
  <li>
  <p><strong>address</strong> <em>(String)</em></p>
  <p>The service provider legal address.</p>
  </li>
  <li>
  <p><strong>taxpayer_number</strong> <em>(String)</em></p>
  <p>The Taxpayer Personal Identification Number (INN) of the service provider.</p>
  > [!NOTE]
  > * The length is `10` characters.
  </li>
  <li>
  <p><strong>state_registration_number</strong> <em>(String)</em></p>
  <p>The State Registration Number for Companies (OGRN) of the service provider.</p>
  > [!NOTE]
  > * The length is `13` characters.
  </li>
  </ul>
  </li>
  </ul>
  </li>
  <li>
  <p><strong>room_name</strong> <em>(String)</em></p>
  <p>The room name in the request language.</p>
  </li>
  <li>
  <p><strong>room_name_info</strong> <em>(Object)</em></p>
  <p>The optional object that may help to resolve certain matching problems. To get access to the object, contact your account manager.</p>
  </li>
  <li>
  <p><strong>serp_filters</strong> <em>([String], deprecated)</em></p>
  <p>The list of hotel amenities. Accepts a list of limited hotel amenities of amenity values. This limit is not stable and may vary between different rates within the same hotel — some values may be applicable for one rate but not considered for another.</p>
  <blockquote>
  <p>[!NOTE]
  Supported values:</p>
  <ul>
  <li>has_airport_transfer.</li>
  <li>has_parking.</li>
  <li>air-conditioning.</li>
  <li>has_internet.</li>
  <li>has_breakfast.</li>
  </ul></blockquote>
  </li>
  <li>
  <p><strong>is_package</strong> <em>(Boolean)</em></p>
  <p>Rates marked with <code>is_package = true</code> should be sold as a part of package, and the price for the hotel should not be shown separately.</p>
  </li>
  </ul>
  </li>
  </ul>





## Response example

```json
{
  "data": {
    "hotels": [
      {
        "id": "dukes_dubai",
        "hid": 8663536,
        "rates": [
          {
            "book_hash": "p-ca1f9fef-bcf7-461e-a0d1-00850ffd10bb",
            "match_hash": "m-d0b85aee-3e6e-556b-a9b6-d98b084764ff",
            "daily_prices": [
              "605.97",
              "605.97",
              "605.97"
            ],
            "meal": "all-inclusive",
            "meal_data": {
              "value": "all-inclusive",
              "has_breakfast": true,
              "no_child_meal": false
            },
            "payment_options": {
              "payment_types": [
                {
                  "amount": "163377.76",
                  "show_amount": "1817.90",
                  "currency_code": "EUR",
                  "show_currency_code": "EUR",
                  "by": null,
                  "is_need_credit_card_data": false,
                  "is_need_cvc": false,
                  "type": "deposit",
                  "vat_data": {
                    "included": false,
                    "applied": false,
                    "amount": "0.00",
                    "currency_code": "EUR",
                    "value": "0.00"
                  },
                  "tax_data": {
                    "taxes": [
                      {
                        "name": "city_tax",
                        "included_by_supplier": false,
                        "amount": "60.00",
                        "currency_code": "AED"
                      },
                      {
                        "name": "occupancy_tax",
                        "included_by_supplier": true,
                        "amount": "103.44",
                        "currency_code": "EUR"
                      },
                      {
                        "name": "service_fee",
                        "included_by_supplier": true,
                        "amount": "162.91",
                        "currency_code": "EUR"
                      },
                      {
                        "name": "vat",
                        "included_by_supplier": true,
                        "amount": "73.88",
                        "currency_code": "EUR"
                      }
                    ]
                  },
                  "perks": {},
                  "commission_info": {
                    "show": {
                      "amount_gross": "1855.00",
                      "amount_net": "1817.90",
                      "amount_commission": "37.10"
                    },
                    "charge": {
                      "amount_gross": "166712.00",
                      "amount_net": "163377.76",
                      "amount_commission": "3334.24"
                    }
                  },
                  "cancellation_penalties": {
                    "policies": [
                      {
                        "start_at": null,
                        "end_at": "2026-10-08T22:00:00",
                        "amount_charge": "0.00",
                        "amount_show": "0.00",
                        "commission_info": {
                          "show": {
                            "amount_gross": "0.00",
                            "amount_net": "0.00",
                            "amount_commission": "0.00"
                          },
                          "charge": {
                            "amount_gross": "0.00",
                            "amount_net": "0.00",
                            "amount_commission": "0.00"
                          }
                        }
                      },
                      {
                        "start_at": "2026-10-08T22:00:00",
                        "end_at": "2026-10-14T22:00:00",
                        "amount_charge": "54393.92",
                        "amount_show": "605.64",
                        "commission_info": {
                          "show": {
                            "amount_gross": "618.00",
                            "amount_net": "605.64",
                            "amount_commission": "12.36"
                          },
                          "charge": {
                            "amount_gross": "55504.00",
                            "amount_net": "54393.92",
                            "amount_commission": "1110.08"
                          }
                        }
                      },
                      {
                        "start_at": "2026-10-14T22:00:00",
                        "end_at": null,
                        "amount_charge": "163377.76",
                        "amount_show": "1817.90",
                        "commission_info": {
                          "show": {
                            "amount_gross": "1855.00",
                            "amount_net": "1817.90",
                            "amount_commission": "37.10"
                          },
                          "charge": {
                            "amount_gross": "166712.00",
                            "amount_net": "163377.76",
                            "amount_commission": "3334.24"
                          }
                        }
                      }
                    ],
                    "free_cancellation_before": "2026-10-08T22:00:00"
                  },
                  "recommended_price": null
                }
              ]
            },
            "bar_rate_price_data": null,
            "rg_ext": {
              "class": 3,
              "quality": 17,
              "sex": 0,
              "bathroom": 2,
              "bedding": 3,
              "family": 0,
              "capacity": 2,
              "club": 0,
              "bedrooms": 0,
              "balcony": 0,
              "view": 0,
              "floor": 0
            },
            "room_name": "Premium Double room (full double bed) (bed type is subject to availability)",
            "room_name_info": {
              "original_rate_name": "Premium Room "
            },
            "serp_filters": [
              "has_bathroom"
            ],
            "sell_price_limits": null,
            "allotment": 99,
            "amenities_data": [
              "not-guaranteed",
              "non-smoking"
            ],
            "any_residency": false,
            "deposit": null,
            "no_show": null,
            "room_data_trans": {
              "main_room_type": "Premium Double room",
              "main_name": "Premium Double room",
              "bathroom": null,
              "bedding_type": "full double bed",
              "misc_room_type": "bed type is subject to availability",
              "beds": [
                {
                  "bed": "double",
                  "count": 1
                }
              ]
            },
            "legal_info": {
              "provider": {
                "name": "",
                "address": "",
                "taxpayer_number": "0000000000",
                "state_registration_number": "0000000000000"
              },
              "hotel": {
                "name": "Отель Dukes The Palm Dubai",
                "address": "Palm Jumeirah, Dubai, Дубай",
                "taxpayer_number": "0000000000",
                "state_registration_number": "0000000000000",
                "work_time": "с 9 до 18 по местному времени"
              }
            },
            "is_package": false
          }
        ],
        "bar_price_data": null
      }
    ],
    "changes": {
      "price_changed": false
    }
  },
  "debug": {
    "api_endpoint": {
      "endpoint": "api/b2b/v3/serp/prebook",
      "is_active": true,
      "is_limited": true,
      "remaining": 29,
      "requests_number": 30,
      "reset": "2026-04-16T20:00:00",
      "seconds_number": 60
    },
    "request": {
      "hash": "sr-019d97d3-f8ef-70e7-b3c8-d9886d2164b0",
      "price_increase_percent": 20
    },
    "method": "POST",
    "real_ip": "104.30.161.77",
    "request_id": "386c74eff7c700ac70c55ab501d97faf",
    "key_id": 1234,
    "api_key_id": 1234,
    "utcnow": "2026-04-16T19:59:32.918838"
  },
  "status": "ok",
  "error": null
}
```

## Errors

The `error` field has the value specified in the headers below.

### `no_available_rates`

The rate with the `price_increase_percent` field value isn’t found. Try to change the value.

### `rate_not_found`

* The rate with the `hash` field value isn’t found.
* The `hash` field value has expired.

Send another search request and change the `hash` field value.

### `invalid_params`

* The `hash` field is required.
* The `hash` field value is incorrect.
* The `price_increase_percent` field value is less than `0`.

### `unknown`

The internal ETG services’ timeout.

### `prebook_from_serp_disabled`

There is no permission to use this call for this contract. Contact the API support team.

### `contract_mismatch`

The pre-book contract differs from the rate contract. They should be the same.
