Travel & Lodging

Booking.com API

The Booking.com API returns hotel search, prices and availability as clean JSON.

5 actionsLive JSON1,000 free creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

The primary hotels/search endpoint returns hotels with id, name, description, location, URL, price and pre-discount price, and you can pull a hotels/detail, live availability, guest reviews and destination autocomplete. It is built for travel apps, price monitors and hospitality analytics that need Booking.com data without scraping a defended site. One ReefAPI key, one shared credit pool, the standard envelope.

Live example

Real request and response JSON

Captured from the indexed primary action, hotels/search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/booking/v1/hotels/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "dest_id": "-755070",
    "dest_type": "city",
    "checkin": "2026-08-01",
    "checkout": "2026-08-03"
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "booking",
    "endpoint": "hotels/search",
    "mode": "live",
    "latency_ms": 1832,
    "record_count": 26,
    "bytes": 402224,
    "cache_hit": false,
    "completeness_pct": 100,
    "destination": {
      "dest_id": "-755070",
      "dest_type": "city",
      "value": "Istanbul, Marmara Region, Turkey"
    },
    "completeness_basis": {
      "items": 26,
      "field_slots": 183,
      "field_slots_filled": 183,
      "pagination_total_present": true
    }
  },
  "data": {
    "items": [
      {
        "hotel_id": 177252,
        "page_name": "sadaret-hotel-old-city-sultanahmet",
        "name": "[redacted-name]",
        "description": null,
        "url": "https://www.booking.com/hotel/tr/sadaret-hotel-old-city-sultanahmet.html",
        "location": {
          "address": "Kucuk Ayasofya Cad. No:31 Sultanahmet",
          "city": "Istanbul",
          "country_code": "tr",
          "latitude": null,
          "longitude": null,
          "display": "Fatih, Istanbul",
          "distance": "0.3 miles from downtown",
          "geo_distance_meters": null
        },
        "price": {
          "text": "Total",
          "amount": "€ 92.53",
          "amount_rounded": "€ 93",
          "amount_unformatted": 92.5266000000001,
          "currency": "EUR"
        },
        "price_before_discount": {
          "text": "Original price",
          "amount": "€ 304.77",
          "amount_rounded": "€ 305",
          "amount_unformatted": 304.774774774775,
          "currency": "EUR"
        },
        "charges_info": null,
        "excluded_charges": {
          "excludeChargesList": [
            "[trimmed-depth]",
            "[trimmed-depth]"
          ],
          "__typename": "ExcludeChargesIrene",
          "excludeChargesAggregated": {
            "__typename": "[trimmed-depth]",
            "amountPerStay": "[trimmed-depth]",
            "copy": "[trimmed-depth]"
          }
        },
        "discounts": [
          {
            "__typename": "[trimmed-depth]",
            "description": "[trimmed-depth]",
            "itemType": "[trimmed-depth]",
            "name": "[trimmed-depth]",
            "productId": "[trimmed-depth]",
            "amount": "[trimmed-depth]"
          },
          {
            "description": "[trimmed-depth]",
            "__typename": "[trimmed-depth]",
            "itemType": "[trimmed-depth]",
            "name": "[trimmed-depth]",
            "amount": "[trimmed-depth]",
            "productId": "[trimmed-depth]"
          }
        ],
        "meal_plan": null,
        "breakfast_included": false,
        "review_score": {
          "score": 9,
          "review_count": 1941,
          "label": "Wonderful",
          "secondary_score": 9.7
        },
        "star_rating": 4,
        "accommodation_type_id": 219,
        "photo": "/xdata/images/hotel/square600/[redacted-phone].jpg?k=c8e07d3b76bca585f2396419b689b4a23b5ed5f54cb056cffb8c7f040aa99762&o=",
        "room_configurations": {
          "unitConfigurations": [
            "[trimmed-depth]"
          ],
          "commonConfiguration": {
            "nbBathrooms": "[trimmed-depth]",
            "nbUnits": "[trimmed-depth]",
            "nbBedrooms": "[trimmed-depth]",
            "name": "[trimmed-depth]",
            "unitId": "[trimmed-depth]",
            "nbLivingrooms": "[trimmed-depth]",
            "bedConfigurations": "[trimmed-depth]",
            "unitTypeNames": "[trimmed-depth]",
            "localizedArea": "[trimmed-depth]",
            "nbAllBeds": "[trimmed-depth]",
            "nbKitchens": "[trimmed-depth]",
            "__typename": "[trimmed-depth]"
          },
          "__typename": "MatchingUnitConfigurations"
        },
        "room_blocks": [
          {
            "room_id": "[trimmed-depth]",
            "occupancy": "[trimmed-depth]",
            "policy_group_id": "[trimmed-depth]",
            "package_id": "[trimmed-depth]",
            "meal_plan_id": "[trimmed-depth]",
            "final_price": "[trimmed-depth]",
            "original_price": "[trimmed-depth]",
            "free_cancellation_until": "[trimmed-depth]",
            "cancellation_type": "[trimmed-depth]",
            "only_left_message": "[trimmed-depth]",
            "available_count_hint": "[trimmed-depth]",
            "meal_plan": "[trimmed-depth]",
            "breakfast_included": "[trimmed-depth]",
            "taxes_and_charges": "[trimmed-depth]"
          }
        ],
        "policies": {
          "enableJapaneseUsersSpecialCase": null,
          "showNoPrepayment": false,
          "showFreeCancellation": false,
          "__typename": "Policies"
        },
        "badges": [
          {
            "style": "[trimmed-depth]",
            "identifier": "[trimmed-depth]",
            "tooltip": "[trimmed-depth]",
            "__typename": "[trimmed-depth]",
            "name": "[trimmed-depth]"
          }
        ]
      },
      {
        "hotel_id": 9179864,
        "page_name": "the-peninsula-istanbul",
        "name": "[redacted-name]",
        "description": null,
        "url": "https://www.booking.com/hotel/tr/the-peninsula-istanbul.html",
        "location": {
          "address": "34 Kemankeş Caddesi Kemankeş Kocamustafapaşa Mahallesi, Karaköy",
          "city": "Beyoğlu",
          "country_code": "tr",
          "latitude": null,
          "longitude": null,
          "display": "Beyoglu, Istanbul",
          "distance": "1 miles from downtown",
          "geo_distance_meters": null
        },
        "price": {
          "text": "Total",
          "amount": "€ 1,345.77",
          "amount_rounded": "€ 1,346",
          "amount_unformatted": 1345.772,
          "currency": "EUR"
        },
        "price_before_discount": {
          "text": null,
          "amount": "",
          "amount_rounded": "",
          "amount_unformatted": 0,
          "currency": ""
        },
        "charges_info": null,
        "excluded_charges": {
          "excludeChargesList": [
            "[trimmed-depth]",
            "[trimmed-depth]"
          ],
          "__typename": "ExcludeChargesIrene",
          "excludeChargesAggregated": {
            "__typename": "[trimmed-depth]",
            "amountPerStay": "[trimmed-depth]",
            "copy": "[trimmed-depth]"
          }
        },
        "discounts": [],
        "meal_plan": null,
        "breakfast_included": false,
        "review_score": {
          "score": 9.5,
          "review_count": 350,
          "label": "Exceptional",
          "secondary_score": 9.7
        },
        "star_rating": 5,
        "accommodation_type_id": 204,
        "photo": "/xdata/images/hotel/square600/[redacted-phone].jpg?k=36fe89261a941dcc265a2c56de61c8a475cd217099e7c71aae5cc4aef22bba9e&o=",
        "room_configurations": {
          "__typename": "MatchingUnitConfigurations",
          "commonConfiguration": {
            "nbKitchens": "[trimmed-depth]",
            "__typename": "[trimmed-depth]",
            "localizedArea": "[trimmed-depth]",
            "unitTypeNames": "[trimmed-depth]",
            "nbAllBeds": "[trimmed-depth]",
            "nbLivingrooms": "[trimmed-depth]",
            "unitId": "[trimmed-depth]",
            "bedConfigurations": "[trimmed-depth]",
            "nbUnits": "[trimmed-depth]",
            "nbBathrooms": "[trimmed-depth]",
            "nbBedrooms": "[trimmed-depth]",
            "name": "[trimmed-depth]"
          },
          "unitConfigurations": [
            "[trimmed-depth]"
          ]
        },
        "room_blocks": [
          {
            "room_id": "[trimmed-depth]",
            "occupancy": "[trimmed-depth]",
            "policy_group_id": "[trimmed-depth]",
            "package_id": "[trimmed-depth]",
            "meal_plan_id": "[trimmed-depth]",
            "final_price": "[trimmed-depth]",
            "original_price": "[trimmed-depth]",
            "free_cancellation_until": "[trimmed-depth]",
            "cancellation_type": "[trimmed-depth]",
            "only_left_message": "[trimmed-depth]",
            "available_count_hint": "[trimmed-depth]",
            "meal_plan": "[trimmed-depth]",
            "breakfast_included": "[trimmed-depth]",
            "taxes_and_charges": "[trimmed-depth]"
          }
        ],
        "policies": {
          "showNoPrepayment": false,
          "showFreeCancellation": false,
          "enableJapaneseUsersSpecialCase": null,
          "__typename": "Policies"
        },
        "badges": {
          "showSkiToDoor": false,
          "showBhTravelCreditBadge": false,
          "__typename": "CustomBadges",
          "showOnlineCheckinBadge": null
        }
      },
      {
        "hotel_id": 12433,
        "page_name": "alzer-istanbul1",
        "name": "[redacted-name]",
        "description": null,
        "url": "https://www.booking.com/hotel/tr/alzer-istanbul1.html",
        "location": {
          "address": "BİNBİRDİREK MAH AT MEYDANI CD DiskapiNo:20",
          "city": "Istanbul",
          "country_code": "tr",
          "latitude": null,
          "longitude": null,
          "display": "Fatih, Istanbul",
          "distance": "0.2 miles from downtown",
          "geo_distance_meters": null
        },
        "price": {
          "text": "Total",
          "amount": "€ 103.88",
          "amount_rounded": "€ 104",
          "amount_unformatted": 103.8799,
          "currency": "EUR"
        },
        "price_before_discount": {
          "text": "Original price",
          "amount": "€ 342.16",
          "amount_rounded": "€ 342",
          "amount_unformatted": 342.162162162162,
          "currency": "EUR"
        },
        "charges_info": null,
        "excluded_charges": {
          "excludeChargesAggregated": {
            "__typename": "[trimmed-depth]",
            "amountPerStay": "[trimmed-depth]",
            "copy": "[trimmed-depth]"
          },
          "excludeChargesList": [
            "[trimmed-depth]",
            "[trimmed-depth]"
          ],
          "__typename": "ExcludeChargesIrene"
        },
        "discounts": [
          {
            "name": "[trimmed-depth]",
            "productId": "[trimmed-depth]",
            "amount": "[trimmed-depth]",
            "itemType": "[trimmed-depth]",
            "__typename": "[trimmed-depth]",
            "description": "[trimmed-depth]"
          },
          {
            "itemType": "[trimmed-depth]",
            "description": "[trimmed-depth]",
            "__typename": "[trimmed-depth]",
            "name": "[trimmed-depth]",
            "productId": "[trimmed-depth]",
            "amount": "[trimmed-depth]"
          }
        ],
        "meal_plan": null,
        "breakfast_included": false,
        "review_score": {
          "score": 8.9,
          "review_count": 737,
          "label": "Excellent",
          "secondary_score": 9.9
        },
        "star_rating": 4,
        "accommodation_type_id": 204,
        "photo": "/xdata/images/hotel/square600/[redacted-phone].jpg?k=a9d0319b390df53fd0d23c777c1257088be21874d62be77ba25235e86ce22f74&o=",
        "room_configurations": {
          "__typename": "MatchingUnitConfigurations",
          "unitConfigurations": [
            "[trimmed-depth]"
          ],
          "commonConfiguration": {
            "nbAllBeds": "[trimmed-depth]",
            "localizedArea": "[trimmed-depth]",
            "unitTypeNames": "[trimmed-depth]",
            "__typename": "[trimmed-depth]",
            "nbKitchens": "[trimmed-depth]",
            "nbBedrooms": "[trimmed-depth]",
            "name": "[trimmed-depth]",
            "nbUnits": "[trimmed-depth]",
            "nbBathrooms": "[trimmed-depth]",
            "bedConfigurations": "[trimmed-depth]",
            "nbLivingrooms": "[trimmed-depth]",
            "unitId": "[trimmed-depth]"
          }
        },
        "room_blocks": [
          {
            "room_id": "[trimmed-depth]",
            "occupancy": "[trimmed-depth]",
            "policy_group_id": "[trimmed-depth]",
            "package_id": "[trimmed-depth]",
            "meal_plan_id": "[trimmed-depth]",
            "final_price": "[trimmed-depth]",
            "original_price": "[trimmed-depth]",
            "free_cancellation_until": "[trimmed-depth]",
            "cancellation_type": "[trimmed-depth]",
            "only_left_message": "[trimmed-depth]",
            "available_count_hint": "[trimmed-depth]",
            "meal_plan": "[trimmed-depth]",
            "breakfast_included": "[trimmed-depth]",
            "taxes_and_charges": "[trimmed-depth]"
          }
        ],
        "policies": {
          "__typename": "Policies",
          "enableJapaneseUsersSpecialCase": null,
          "showFreeCancellation": false,
          "showNoPrepayment": false
        },
        "badges": [
          {
            "style": "[trimmed-depth]",
            "identifier": "[trimmed-depth]",
            "tooltip": "[trimmed-depth]",
            "__typename": "[trimmed-depth]",
            "name": "[trimmed-depth]"
          }
        ]
      }
    ],
    "count": 26,
    "pagination": {
      "per_page": 25,
      "total": 3546,
      "offset": 0,
      "page": 1,
      "has_more": true,
      "next_page": 2
    },
    "applied": {
      "sort_by": "top_picks",
      "filters": []
    }
  }
}
Actions

What the Booking.com API does

ActionDescriptionConcrete use caseKey params
hotels/searchSearch hotels in a destination for given dates (25 hotels per page, with prices, review scores, photos, room configurations). Supports sorting, price/star/rating/amenity filters and paging. Pass ?include_facets=1 to list every available filter and sorter for the destination.Travel apps call hotels/search to search hotels in a destination for given dates (25 hotels per page, with prices, review score….query, dest_id, dest_type, checkin, checkout, ...
hotels/detailFull hotel record: summary, rating breakdown, facilities, room types, surroundings, FAQ.Pricing monitors call hotels/detail to get full hotel record.page_name, country_code, hotel_url, checkin, checkout, ...
hotels/availabilityVisible room blocks (room, occupancy, price, cancellation policy, meal plan) for a destination's top hotel on given dates.Itinerary products call hotels/availability to get visible room blocks (room, occupancy, price, cancellation policy, meal plan) for a destinatio….query, dest_id, dest_type, checkin, checkout, ...
hotels/reviewsPaginated, deduped guest reviews for one hotel (score, title, pros/cons text, owner reply, room type, stay dates, reviewer country, photos). Fetches ALL reviews by default; supports sorting and keyword search. The response also lists the available review filters (by score / language / customer type / season / topic).Hospitality analysts call hotels/reviews to get paginated, deduped guest reviews for one hotel (score, title, pros/cons text, owner reply, ro….page_name, country_code, hotel_id, hotel_url, max_reviews, ...
destinations/autocompleteResolve a free-text place ('Paris', 'Maldives', 'JFK') into the destination IDs the other actions take (dest_id + dest_type), with country, coordinates and how many hotels/homes each match has. Use this first when you only have a place name.Travel apps call destinations/autocomplete to resolve a free-text place ('Paris', 'Maldives', 'JFK') into the destination IDs the other act….query, limit
Code samples

Call hotels/search from your stack

curl -X POST https://api.reefapi.com/booking/v1/hotels/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"dest_id":"-755070","dest_type":"city","checkin":"2026-08-01","checkout":"2026-08-03"}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.booking.hotels/search with {"dest_id":"-755070","dest_type":"city","checkin":"2026-08-01","checkout":"2026-08-03"}.
Use cases

Who uses this API and why

  • Travel apps call hotels/search to show live hotel prices and availability for a destination.
  • Rate-parity and pricing tools use hotels/availability to monitor a property's prices across dates.
  • Hospitality analytics use hotels/reviews to track guest ratings and feedback.
FAQ

Questions developers ask before integrating

What is the Booking.com API?

Booking.com API is a ReefAPI endpoint group for search hotels with prices, scores and availability. It returns live JSON through POST requests under /booking/v1.

Is the Booking.com API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Booking.com calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Booking.com login or account?

No login to Booking.com is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Booking.com data?

The page example is captured from a live hotels/search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Booking.com API use?

Booking.com actions currently cost 1-3 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call Booking.com from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call booking actions with the same key, credit pool and JSON envelope used by normal REST requests.

Is the Booking.com API a Booking.com scraper?

It is the managed alternative to a DIY Booking.com scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same search hotels with prices, scores and availability back as clean JSON.

Why does my Booking.com scraper keep getting blocked?

Most Booking.com scrapers break on anti-bot defenses, rate limits and IP bans that need rotating residential proxies and browser fingerprinting to clear. ReefAPI handles all of that for you — no proxies, no captchas, no maintenance — and returns live JSON. Blocked or failed calls are free.

docs / booking

Booking.com

Search hotels with prices, scores and availability.

base /booking/v15 endpoints
post/booking/v1/hotels/search2 credits

Search hotels in a destination for given dates (25 hotels per page, with prices, review scores, photos, room configurations). Supports sorting, price/star/rating/amenity filters and paging. Pass ?include_facets=1 to list every available filter and sorter for the destination.

ParameterAllowed / rangeDescription
queryoptionalDestination as free text — city, region or landmark. Provide query OR dest_id+dest_type.
dest_idoptionalAdvanced: Booking destination ID (unambiguous — bypasses the free-text lookup). Pair with dest_type.
dest_typeoptionalAdvanced: the destination's type as Booking labels it. One of: city, region, district, landmark, airport, hotel, country.
checkinoptionalCheck-in date (YYYY-MM-DD). Always pass real dates — prices and availability depend on them.
checkoutoptionalCheck-out date (YYYY-MM-DD).
adults = 2optional1–30Number of adult guests.
rooms = 1optional1–30Number of rooms.
children_agesoptionalComma-separated ages of children (e.g. '5,9'). Adds child occupancy to the search/price. Omit for adults-only.
currency = EURoptionalPrice currency (ISO code: EUR, USD, GBP, TRY…).
page = 1optional1–40Result page (25 hotels each). pagination.total in the response tells you how many results exist.
sort_byoptionalSort order. One of: top_picks (default), price (low→high), price_desc (high→low), review_score, best_reviewed_and_price, stars_desc, stars_asc, distance.
min_priceoptionalMinimum price per stay, in the chosen currency.
max_priceoptionalMaximum price per stay, in the chosen currency.
min_ratingoptional1–10Minimum guest review score (1–10). E.g. 8 = 'Very good+'.
starsoptionalStar rating(s) to include, comma-separated (1–5). E.g. '4,5' = 4- and 5-star only.
free_cancellation = falseoptionalOnly properties offering free cancellation.
breakfast_included = falseoptionalOnly properties where breakfast is included.
amenitiesoptionalAdvanced: comma-separated Booking filter IDs (from ?include_facets=1 → available_filters). E.g. hotelfacility-107 (pool), roomfacility-11 (air-con).
include_facets = falseoptionalAlso return available_sorters + available_filters for the destination (filter/sort discovery).
include_raw = falseoptionalInclude Booking's full raw payload per item (large). Default off — the normalized fields cover the common cases.
Try in playground →
post/booking/v1/hotels/detail3 credits

Full hotel record: summary, rating breakdown, facilities, room types, surroundings, FAQ.

ParameterAllowed / rangeDescription
page_nameoptionalREQUIRED for hotels/detail & hotels/reviews (with country_code): the hotel's URL slug — booking.com/hotel/<country_code>/<page_name>.html. Copy page_name + country_code straight from a hotels/search result item (or pass the item's full url as hotel_url). A numeric hotel_id alone does NOT work — Booking detail pages are addressed by this slug.
country_codeoptionalREQUIRED with page_name (for hotels/detail & hotels/reviews): the 2-letter country in the hotel URL (booking.com/hotel/<country_code>/…). Comes from the hotels/search result item alongside page_name.
hotel_urloptionalFull hotel URL (alternative to page_name+country_code) — the url field of a hotels/search result item.
checkinoptionalCheck-in date (YYYY-MM-DD). Always pass real dates — prices and availability depend on them.
checkoutoptionalCheck-out date (YYYY-MM-DD).
adults = 2optional1–30Number of adult guests.
rooms = 1optional1–30Number of rooms.
currency = EURoptionalPrice currency (ISO code: EUR, USD, GBP, TRY…).
Try in playground →
post/booking/v1/hotels/availability2 credits

Visible room blocks (room, occupancy, price, cancellation policy, meal plan) for a destination's top hotel on given dates.

ParameterAllowed / rangeDescription
queryoptionalDestination free text. Provide query OR dest_id+dest_type.
dest_idoptionalAdvanced: Booking destination ID (unambiguous — bypasses the free-text lookup). Pair with dest_type.
dest_typeoptionalAdvanced: the destination's type as Booking labels it. One of: city, region, district, landmark, airport, hotel, country.
checkinoptionalCheck-in date (YYYY-MM-DD). Always pass real dates — prices and availability depend on them.
checkoutoptionalCheck-out date (YYYY-MM-DD).
hotel_idoptionalPin to one hotel from the search results (default: the top result).
adults = 2optional1–30Number of adult guests.
rooms = 1optional1–30Number of rooms.
children_agesoptionalComma-separated ages of children (e.g. '5,9'). Adds child occupancy to the search/price. Omit for adults-only.
currency = EURoptionalPrice currency (ISO code: EUR, USD, GBP, TRY…).
Try in playground →
post/booking/v1/hotels/reviews1 credit

Paginated, deduped guest reviews for one hotel (score, title, pros/cons text, owner reply, room type, stay dates, reviewer country, photos). Fetches ALL reviews by default; supports sorting and keyword search. The response also lists the available review filters (by score / language / customer type / season / topic).

ParameterAllowed / rangeDescription
page_nameoptionalREQUIRED for hotels/detail & hotels/reviews (with country_code): the hotel's URL slug — booking.com/hotel/<country_code>/<page_name>.html. Copy page_name + country_code straight from a hotels/search result item (or pass the item's full url as hotel_url). A numeric hotel_id alone does NOT work — Booking detail pages are addressed by this slug.
country_codeoptionalREQUIRED with page_name (for hotels/detail & hotels/reviews): the 2-letter country in the hotel URL (booking.com/hotel/<country_code>/…). Comes from the hotels/search result item alongside page_name.
hotel_urloptionalFull hotel URL (alternative to page_name+country_code).
max_reviewsoptional1–10000How many reviews to fetch. Omit for ALL reviews (paged 25/page internally).
sort_byoptionalReview order. One of: most_relevant (default), newest, oldest, highest_score, lowest_score.
keywordoptionalOnly reviews mentioning this keyword (free-text search).
review_page_size = 25optional1–25Advanced: reviews per internal page (Booking caps at 25).
hotel_idoptionalAdvanced: Booking hotel ID.
Try in playground →
post/booking/v1/destinations/autocomplete1 credit

Resolve a free-text place ('Paris', 'Maldives', 'JFK') into the destination IDs the other actions take (dest_id + dest_type), with country, coordinates and how many hotels/homes each match has. Use this first when you only have a place name.

ParameterAllowed / rangeDescription
queryrequiredPlace to look up — city, region, landmark, airport or country.
limit = 10optional1–20Max suggestions to return (1–20).
Try in playground →