# Prebook rate from hotelpage step

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

Tags: affiliate

---



**Sandbox**

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

**Production**

```
https://api.worldota.net/api/b2b/v3/hotel/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.



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`, and `contract_mismatch`.

## Request example


**Sandbox**

```shell
curl --user '<KEY_ID>:<API_KEY>' 'https://api-sandbox.worldota.net/api/b2b/v3/hotel/prebook/' \
--header 'Content-Type: application/json' \
--data '{
  "hash": "h-5e5b5107-7745-5926-8c28-303baddd7327",
  "price_increase_percent": 20
}'
```

**Production**

```shell
curl --user '<KEY_ID>:<API_KEY>' 'https://api.worldota.net/api/b2b/v3/hotel/prebook' \
--header 'Content-Type: application/json' \
--data '{
  "hash": "h-6ac42450-53d0-59a5-9543-a11f40132617",
  "price_increase_percent": 20
}'
```




## Request body



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

  <p>The unique rate ID.</p>
  <p>Use this value within 24 hours after the [Retrieve hotelpage](/docs/affiliate-api/hotel-search/retrieve-hotelpage/)
   call returns a relevant rate.</p>
  > [!NOTE]
  > * 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>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": "conrad_los_angeles",
        "hid": 10004834,
        "rates": [
          {
            "book_hash": "p-86877a1e-d725-4824-9833-c50a12a48171",
            "match_hash": "m-fde98be9-7272-5cf3-9784-d3c8b319c5b9",
            "daily_prices": [
              "4457.01",
              "5008.18",
              "4416.31"
            ],
            "meal": "breakfast",
            "meal_data": {
              "value": "breakfast",
              "has_breakfast": true,
              "no_child_meal": false
            },
            "payment_options": {
              "payment_types": [
                {
                  "amount": "13881.50",
                  "show_amount": "13881.50",
                  "currency_code": "USD",
                  "show_currency_code": "USD",
                  "by": null,
                  "is_need_credit_card_data": true,
                  "is_need_cvc": true,
                  "type": "hotel",
                  "tax_data": {
                    "taxes": [
                      {
                        "name": "occupancy_tax",
                        "included_by_supplier": true,
                        "amount": "1914.69",
                        "currency_code": "USD"
                      },
                      {
                        "name": "resort_fee",
                        "included_by_supplier": false,
                        "amount": "135.00",
                        "currency_code": "USD"
                      }
                    ]
                  },
                  "cancellation_penalties": {
                    "policies": [
                      {
                        "start_at": null,
                        "end_at": "2026-11-21T08:00:00",
                        "amount_charge": "0.00",
                        "amount_show": "0.00"
                      },
                      {
                        "start_at": "2026-11-21T08:00:00",
                        "end_at": null,
                        "amount_charge": "13881.50",
                        "amount_show": "13881.50"
                      }
                    ],
                    "free_cancellation_before": "2026-11-21T08:00:00"
                  }
                }
              ]
            },
            "rg_ext": {
              "class": 5,
              "quality": 23,
              "sex": 0,
              "bathroom": 2,
              "bedding": 3,
              "family": 0,
              "capacity": 2,
              "club": 0,
              "bedrooms": 0,
              "balcony": 0,
              "view": 0,
              "floor": 0
            },
            "room_name": "Conrad Penthouse Double Suite (full double bed)",
            "room_name_info": null,
            "serp_filters": [
              "has_bathroom"
            ],
            "allotment": 1,
            "amenities_data": [
              "non-smoking"
            ],
            "any_residency": true,
            "deposit": null,
            "no_show": {
              "amount": "4457.00",
              "currency_code": "USD",
              "from_time": "12:00:00"
            },
            "room_data_trans": {
              "main_room_type": "Conrad Penthouse Double Suite",
              "main_name": "Conrad Penthouse Double Suite",
              "bathroom": null,
              "bedding_type": "full double bed",
              "misc_room_type": null,
              "beds": [
                {
                  "bed": "double",
                  "count": 1
                }
              ]
            },
            "legal_info": {
              "provider": {
                "name": "",
                "address": "",
                "taxpayer_number": "0000000000",
                "state_registration_number": "0000000000000"
              },
              "hotel": {
                "name": "Conrad Los Angeles",
                "address": "100 South Grand Avenue, Лос-Анджелес",
                "taxpayer_number": "0000000000",
                "state_registration_number": "0000000000000",
                "work_time": "from 9-18 local time"
              }
            },
            "is_package": false
          }
        ]
      }
    ],
    "changes": {
      "price_changed": false
    }
  },
  "debug": {
    "api_endpoint": {
      "endpoint": "api/b2b/v3/hotel/prebook",
      "is_active": true,
      "is_limited": true,
      "remaining": 29,
      "requests_number": 30,
      "reset": "2026-04-16T20:27:00",
      "seconds_number": 60
    },
    "request": {
      "hash": "h-6ac42450-53d0-59a5-9543-a11f40132617",
      "price_increase_percent": 20
    },
    "method": "POST",
    "real_ip": "104.30.161.77",
    "request_id": "716ecacd3da15f9fd2604278658c8106",
    "key_id": 1234,
    "api_key_id": 1234,
    "utcnow": "2026-04-16T20:26:46.835910"
  },
  "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_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.
