# Search properties

Searches Booking.com for `destination` and returns one page of properties with coordinates, address, star rating, review count, description, photo and paid-placement markers. Supports real pagination via `offset`/`rows_per_page`. Prices require `checkin` and `checkout`.

- Platform: Booking
- Request: `GET https://api.toolzerhub.com/v1/booking/search`
- Auth: `x-api-key` header
- Cost: 1 credit per successful request. Failed requests are not billed.
- Page: https://docs.toolzerhub.com/reference/booking/search/search-booking-properties

| Parameter | In | Required | Type | Description |
| --- | --- | --- | --- | --- |
| `destination` | query | yes | string | City, region, neighbourhood, or country to search for, as free text. |
| `checkin` | query | no | string | Arrival date, YYYY-MM-DD. Optional; with dates the search returns availability and prices for that stay, without them every row's price is null. Must be given together with checkout, which must be after it. No other range checking is done. |
| `checkout` | query | no | string | Departure date, YYYY-MM-DD. Must be given together with checkin and must be after it. |
| `adults` | query | no | integer | Guests in the party. Booking's own nbAdults; it affects which properties can accommodate the search and what they cost. Default: 2. |
| `rooms` | query | no | integer | Rooms wanted. Booking's own nbRooms. Default: 1. |
| `offset` | query | no | integer | Row offset for pagination, in steps of rows_per_page. This calls Booking's own search API, not the search page, which cannot paginate at all. Read total_results and has_more to know when to stop — depth varies by destination. Capped at 10000 as a sanity bound, not a measured limit. Default: 0. |
| `rows_per_page` | query | no | integer | How many properties to return, 1-100. Booking's own frontend sends 25, which is the default here; 100 is measured working and turns a 353-property city into four calls instead of fifteen. It is not raised past the largest value actually measured. Default: 25. |

## Example request

```bash
curl "https://api.toolzerhub.com/v1/booking/search?destination=<destination>" \
  -H "x-api-key: $TOOLZERHUB_API_KEY"
```

Success responses are wrapped as `{ "data": ... }`. Errors return `{ "error": { "code", "status", "message", "retryable", "details" } }`. See https://docs.toolzerhub.com/docs/responses-and-errors.
