Prebook rate from search step

Prebook rate from search step

#affiliate

This call is available to only certified partners who don’t use the Retrieve hotelpage call in their flow.
https://api.worldota.net/api/b2b/v3/serp/prebook/
ℹ️

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.
ℹ️

The limitations:

  • The recommended call timeout is 60 seconds.
  • The minimum call timeout is 30 seconds.

Request example

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

Response

Response example

{
  "data": {
    "hotels": [
      {
        "id": "test_hotel_do_not_book",
        "hid": 8473727,
        "rates": [
          {
            "book_hash": "p-690e6790-46c7-4d4a-b0a7-a52c1750393d",
            "match_hash": "m-edaa1e53-06a6-5914-9126-c4875660f18f",
            "daily_prices": [
              "2.00"
            ],
            "meal": "nomeal",
            "meal_data": {
              "value": "nomeal",
              "has_breakfast": false,
              "no_child_meal": true
            },
            "payment_options": {
              "payment_types": [
                {
                  "amount": "268.00",
                  "show_amount": "308.97",
                  "currency_code": "EUR",
                  "show_currency_code": "USD",
                  "by": "credit_card",
                  "is_need_credit_card_data": true,
                  "is_need_cvc": true,
                  "type": "now",
                  "tax_data": {
                    "taxes": [
                      {
                        "name": "city_tax",
                        "included_by_supplier": false,
                        "amount": "787.93",
                        "currency_code": "HNL"
                      },
                      {
                        "name": "electricity_fee",
                        "included_by_supplier": true,
                        "amount": "0.06",
                        "currency_code": "USD"
                      },
                      {
                        "name": "service_fee",
                        "included_by_supplier": false,
                        "amount": "15.30",
                        "currency_code": "HNL"
                      },
                      {
                        "name": "vat",
                        "included_by_supplier": false,
                        "amount": "355.45",
                        "currency_code": "HNL"
                      }
                    ]
                  },
                  "cancellation_penalties": {
                    "policies": [
                      {
                        "start_at": null,
                        "end_at": "2026-05-20T00:00:00",
                        "amount_charge": "0.00",
                        "amount_show": "0.00"
                      },
                      {
                        "start_at": "2026-05-20T00:00:00",
                        "end_at": null,
                        "amount_charge": "268.00",
                        "amount_show": "308.97"
                      }
                    ],
                    "free_cancellation_before": "2026-05-20T00:00:00"
                  }
                }
              ]
            },
            "rg_ext": {
              "class": 3,
              "quality": 2,
              "sex": 0,
              "bathroom": 2,
              "bedding": 3,
              "family": 0,
              "capacity": 2,
              "club": 0,
              "bedrooms": 0,
              "balcony": 0,
              "view": 0,
              "floor": 0
            },
            "room_name": "Standard Double room (full double bed)",
            "room_name_info": null,
            "serp_filters": [
              "has_bathroom",
              "has_internet"
            ],
            "allotment": 33,
            "amenities_data": [
              "non-smoking"
            ],
            "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": "full double bed",
              "misc_room_type": null
            },
            "legal_info": {
              "provider": {
                "name": "",
                "address": "",
                "taxpayer_number": "0000000000",
                "state_registration_number": "0000000000000"
              },
              "hotel": {
                "name": "Test Hotel (Do not book) test",
                "address": "Avenida Roble, Frente al Mall Multiplaza",
                "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/serp/prebook",
      "is_active": true,
      "is_limited": true,
      "remaining": 29,
      "requests_number": 30,
      "reset": "2025-10-31T15:34:00",
      "seconds_number": 60
    },
    "request": {
      "hash": "sr-019a3ae6-0160-7945-9f6d-516791a39260",
      "price_increase_percent": 20
    },
    "method": "POST",
    "real_ip": "104.30.161.77",
    "request_id": "aa2890f8c136cc39104370ef11e33d32",
    "key_id": 1234,
    "api_key_id": 1234,
    "utcnow": "2025-10-31T15:33:13.467401"
  },
  "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.