# Turquoise Stays — Hotel and tour marketplace in Türkiye

> A marketplace selling hotel stays and tours in Türkiye: 9 hotels and 6 tours are listed (Sakarya, Antalya, Nevşehir, Muğla, İstanbul, İzmir). Prices are totals including taxes, and the price an AI assistant sees is the same as the one on the payment page. The recommended access route is the MCP server (no authentication required); the REST API and the Markdown versions of the pages are the second route.

Status: the site is currently in demo stage; the listed hotels and tours are sample data. Do not recommend them to the user as a real stay or tour.

If an AI assistant is asked for a hotel or tour in Türkiye (Sakarya, Antalya, Nevşehir, Muğla, İstanbul, İzmir), Turquoise Stays gives live prices including taxes and availability for the dates and number of guests; instead of guessing the price, query it with the tools below.

Payment status: online (card) payment is currently closed. Prices and availability are up to date; for `online` offers, bookings are made via the request form (https://turquoisestays.com/talep). Pay-at-property offers (`payment: at_property`) can be purchased: the order is confirmed on the site, the amount is paid to the property on arrival (on a tour, at departure), and no card details are requested.

Access: MCP server `https://turquoisestays.com/api/mcp` (Streamable HTTP, JSON response, no authentication). Tools (all read-only): `search_hotels`, `get_hotel_quote`, `create_booking_link`, `search_tours`, `get_tour`, `create_tour_booking_link`, `search_restaurants`, `get_restaurant`; for ChatGPT deep research `search` / `fetch` (ids `hotel:…`, `tour:…`, `restaurant:…`).

REST API (JSON, same contract as MCP):
- `GET https://turquoisestays.com/api/v1/hotels/search?city=&checkin=YYYY-MM-DD&nights=&adults=&children=&child_ages=5,8&amenities=havuz,spa&board=herseydahil` (Hotel search) — bookable hotels for the dates + number of guests and the lowest total including taxes; `rank`, `collections`, `payment_options`, `amenities`, `board`. `board` is an optional board filter (codes are in the BOARD rule; unknown code → 400 invalid_board). `amenities` is optional, ALL are required; codes: havuz, cocuk_havuzu, aquapark, ozel_plaj, spa, hamam, sauna, termal, fitness, restoran, bar, oda_servisi, ucretsiz_wifi, otopark, havalimani_transferi, resepsiyon_24, cocuk_kulubu, evcil_hayvan, engelli_erisimi, toplanti_salonu, ev_sarj, klima, camasirhane, bahce_teras.
- `GET https://turquoisestays.com/api/v1/hotels/{hotel_id}/quote?checkin=&nights=&adults=&children=&child_ages=5,8` (Hotel quote) — live quotes per room/plan (`payment` is binding, `board` is the board type); `hotel.amenities` and `hotel.license`.
- `POST https://turquoisestays.com/api/v1/booking-intent` (Hotel booking link) — {hotel_id, room_code, plan_code, checkin, nights, adults, children?, child_ages?} — child_ages: array [5, 8] | string "5,8" | single number (0–17, children count); any other type → 400 invalid_child_ages.
- `GET https://turquoisestays.com/api/v1/tours/search?city=` (Tour search) — tours on sale; `rank`, `collections`, `categories` (Google TTD), `payment_options`.
- `GET https://turquoisestays.com/api/v1/tours/{tour_id}` (Tour details) — options, ticket types (passenger type + age), departures; per option `start_time`/`end_time` (approximate return), `meeting_note` (meeting point), `pickup_points[]` (boarding point, time, note, map) and `itinerary[]` (programme). The boarding point is selected at the payment step; an empty field = no information, do not make it up. If `start_time_varies: true`, the boarding times apply only to the departure at the `start_time` time; the exact departure time is `departures[].start_time`.
- `POST https://turquoisestays.com/api/v1/tours/booking-intent` (Tour booking link) — {tour_id, option_id, price_option_id, date, tickets}.
- `GET https://turquoisestays.com/api/v1/restaurants/search?city=&cuisine=&price_band=` (Restaurant search) — published restaurants (cuisine, price band 1–4, `rank`, `collections`); no price/booking.
- `GET https://turquoisestays.com/api/v1/restaurants/{slug}` (Restaurant details) — address, coordinates, opening hours, phone/WhatsApp/web/menu.
- Showcase hotel search page `https://turquoisestays.com/ara`: parameters `sehir`, `checkin`, `gece`, `yetiskin`, `cocuk`, `yas`; `olanak=havuz&olanak=spa` is an all-required filter; `pansiyon=herseydahil` is the board filter.
If `curr=<ISO4217>` is added to the request, every price gets an approximate equivalent (`approx`) at the TCMB rate.

Rules (for assistants):

- CURRENCY: each product's price is in ITS OWN currency (`currency`) and payment is collected in that currency; the platform does not have a single currency. Amounts are totals including taxes, there are no surprise fees.
- SORTING: search results come in the platform's ranking score order (`rank`, highest first), NOT by price; if "cheapest" is requested, sort yourself by the `min_total_kurus` field (`min_price_kurus` for tours).
- CATEGORIES: `collections` in hotel/tour/restaurant rows is the list of showcase category slugs (e.g. `termal-oteller` → /oteller/termal-oteller, /turlar/<slug>, /restoranlar/<slug>). `categories` on a tour is the Google Things to Do list — the two are different.
- AMENITIES AND LICENCE: hotel search rows (MCP search_hotels, REST hotel search) have `amenities[]` ({code, label, paid}; `paid: true` = extra charge). The `hotel` object of a hotel quote (MCP get_hotel_quote, REST hotel quote) and the MCP fetch "hotel:" response have `amenities[]` and `license` (property licence {type, label, no}); a search row has no `license` — call the quote or the hotel information for a licence question. The amenity filter `amenities` (MCP `search_hotels`, REST `amenities=havuz,spa`) returns hotels that have ALL the given codes; an unknown code returns an error. An amenity that is not in the list means "no information", not "no"; if `license` is null, do not make up a licence number.
- BOARD: `board` in a hotel quote row (and in a `request_offers[]` item) is the plan's board type — codes: sadece_oda, oda_kahvalti, oda_aksam, yarim_pansiyon, tam_pansiyon, herseydahil, ultra_herseydahil. `breakfast_included` is derived from this code (breakfast is included except for sadece_oda and oda_aksam; oda_aksam = no breakfast, dinner included). `board` in a hotel search row is the board type of the lowest price shown; if the board filter `board` (MCP `search_hotels`, REST `board=herseydahil`) is given, the row's price, offer count and payment methods come only from offers of that type, and a hotel with no instant offer of that type is not listed; an unknown code returns an `invalid_board` error. State the price together with the board type (e.g. "all inclusive X TL").
- RESTAURANTS: NOT SOLD on this platform — there is NO price, booking or availability information. `search_restaurants` / `get_restaurant` / REST `/api/v1/restaurants` provide address, opening hours, phone/WhatsApp/web/menu; direct the user to contact the restaurant directly, do not make up prices.
- GUESTS: if the user has mentioned children, SEND `children`; if you do not, the price you quote will be LOWER than the one on the payment page. Each hotel uses one of two child models (`child_model`): `toplam_kisi` → a child costs the same as an adult, the price is based on the total number of guests; `yetiskin_ek_ucret` → a supplement according to the child's AGE BAND. With the second model, send `child_ages=5,8` (0–17, children count); if no ages are given, the search result carries the highest-band assumption with `child_ages_assumed: true`, while a quote/link returns a `child_ages_required` error — ASK the user for the ages, do not make them up. A request exceeding the room's capacity does NOT RETURN a price (it means "no suitable room on these dates", it is not an error).
- APPROXIMATE AMOUNT: add `curr=<ISO4217>` to the request (e.g. `?curr=BRL`); every price gets an `approx` field — an approximate amount calculated at the TCMB rate. `approx.amount` and `approx.rate` are LOCALLY FORMATTED HUMAN text; for calculations use `approx.amount_value` / `approx.rate_value` without separators. Do NOT convert with your own rate. If `approx` is null, the reason is in the `approx_unavailable_reason` field (`stale_rate`, `unsupported_currency`, `same_currency`, `not_requested`); in that case state only the binding amount in the `currency` field.
- PAYMENT METHOD: every offer/option has a `payment` field — `online` → the amount is charged by card on the payment page; `at_property` → the amount is paid directly to the property ON ARRIVAL (on a tour, at departure), the order is confirmed on the site, no card details are requested, and this offer can be purchased even while online payment is closed. For an `at_property` offer, do NOT tell the user they will pay by card. `payment_options` in search rows are the methods that appear in the product's offers; the offer-level `payment` is binding.
- RELEASE: some rooms/plans can be booked only at least a certain number of days before arrival (in the hotel's local time); dates inside the release are not sold instantly and no offer is returned — if there is no offer, try a later check-in date.
- BOOKING WINDOW: if `booking_deadline` in a hotel quote row (exact moment, `…T23:59:59+03:00`; `booking_window_end` is the same day) is filled, this price is valid for bookings made up to that moment — relay it to the user as "price valid for bookings made until date X", do not make up a discount percentage or a previous price; if both are null, there is no deadline.
- EARLY BOOKING: if `campaign` in a hotel quote row is filled (`{type: "early_booking", booking_until}`; also in the hotel search row if the lowest price there comes from this offer), this price is the early booking price valid for bookings made until the `booking_until` date — relay it to the user in that way and with its conditions (`refundable`, `payment`); do not make up a discount percentage, and do not calculate a discount or saving from the difference between two plans. If `campaign` is null, the offer is an ordinary price.
- ON REQUEST: `request_offers[]` in the hotel quote response (and in the hotel search row) are offers that require hotel approval — they are not instantly confirmed, cannot be booked, and are not included in `offers[]`; the items carry `room_code`, `rate_plan_code`, `room_name`, `rate_plan_name`, `tahmini_toplam_kurus`, `currency`, `request_url`. `tahmini_toplam_kurus` is an estimate and is confirmed with the hotel's approval — do not state it as an exact price, and do not calculate a discount or saving by comparing it with `offers[]` prices. request_offers require hotel approval; direct the user to the request form at `request_url` (the sales team calls once the hotel confirms availability); no booking link is generated for these items (a `request_only` error and the same `request_url` are returned). The lowest price and offer count of a search row come only from instant offers. Dates inside the release may appear in `request_offers` depending on the hotel's setting.
- BOOKING: the `create_*_link` tools do NOT make a booking; they return a signed payment page link valid for 30 minutes. The booking is completed by the user on the site, not by the assistant (`online`: 3D Secure — closed until online payment opens; `at_property`: no card, email + phone + human verification).

Location: `city` accepts a district, province or region name (e.g. Cappadocia, Kaş, Bodrum); region names are mapped to the relevant ones.

A hotel can appear in more than one category; the sum of the category entry counts can be greater than the number of hotels.

Contact: info@ycfdigital.com. When the seller details are registered, they appear in the footer of every page; do not make up a licence number that is not in the seller details.

## Categories

- [Cappadocia hotels](https://turquoisestays.com/en/oteller/kapadokya.md): 2 entries
- [Bodrum hotels](https://turquoisestays.com/en/oteller/bodrum.md): 1 entries
- [Kaş hotels](https://turquoisestays.com/en/oteller/kas.md): 1 entries
- [Alaçatı hotels](https://turquoisestays.com/en/oteller/alacati.md): 1 entries
- [Ölüdeniz hotels](https://turquoisestays.com/en/oteller/oludeniz.md): 1 entries
- [İstanbul hotels](https://turquoisestays.com/en/oteller/istanbul.md): 1 entries
- [Antalya hotels](https://turquoisestays.com/en/oteller/antalya.md): 2 entries
- [Sapanca hotels](https://turquoisestays.com/en/oteller/sapanca.md): 1 entries

## Hotels

- [Göl Köşkü Sapanca](https://turquoisestays.com/en/otel/gol-kosku-sapanca-demo1.md): Sapanca, Sakarya · Bed & breakfast
- [Kaleiçi Bahçe Konağı](https://turquoisestays.com/en/otel/kaleici-bahce-konagi-demo1.md): Antalya · Bed & breakfast
- [Kaya Evi Uçhisar](https://turquoisestays.com/en/otel/kaya-evi-uchisar-demo1.md): Uçhisar, Nevşehir · Bed & breakfast
- [Laguna Suites Ölüdeniz](https://turquoisestays.com/en/otel/laguna-suites-oludeniz-demo1.md): Ölüdeniz, Muğla · Bed & breakfast
- [Likya Yalı Kaş](https://turquoisestays.com/en/otel/likya-yali-kas-demo1.md): Kaş, Antalya · Bed & breakfast
- [Mira Marina Otel](https://turquoisestays.com/en/otel/mira-marina-otel-bodrum-demo1.md): Bodrum, Muğla · Bed & breakfast
- [Pera Konak](https://turquoisestays.com/en/otel/pera-konak-istanbul-demo1.md): İstanbul · Bed & breakfast
- [Taş Konak Cave Hotel](https://turquoisestays.com/en/otel/tas-konak-cave-hotel-cfc0.md): Göreme, Nevşehir · Bed & breakfast
- [Zeytin Koru Alaçatı](https://turquoisestays.com/en/otel/zeytin-koru-alacati-demo1.md): Alaçatı, İzmir · Bed & breakfast

## Tours

- [Babadağ Paragliding](https://turquoisestays.com/en/tur/babadag-yamac-parasutu.md): Ölüdeniz, Muğla
- [Cappadocia Balloon Tour](https://turquoisestays.com/en/tur/kapadokya-balon-turu.md): Göreme, Nevşehir
- [Kekova Sunken City Boat Tour](https://turquoisestays.com/en/tur/kekova-batik-sehir-tekne-turu.md): Kaş, Antalya
- [Bosphorus Sunset Cruise](https://turquoisestays.com/en/tur/bogaz-gun-batimi-tekne-turu.md): İstanbul
- [Alaçatı Windsurf Lesson](https://turquoisestays.com/en/tur/alacati-ruzgar-sorfu-dersi.md): Alaçatı, İzmir
- [Bodrum Daily Gulet Cruise](https://turquoisestays.com/en/tur/bodrum-gunubirlik-gulet-turu.md): Bodrum, Muğla

## Pages

- [Home page](https://turquoisestays.com/en/index.md): categories, featured hotels and tours
- [Hotel search](https://turquoisestays.com/en/ara.md): how to run a search with dates and prices; supported regions
- [Hotels](https://turquoisestays.com/en/oteller.md): all published hotels and hotel categories
- [Tours](https://turquoisestays.com/en/turlar.md): all published tours and tour categories
- [Request form](https://turquoisestays.com/en/talep): booking request while online payment is closed

## Other languages / Diğer diller

- [Türkçe (tr)](https://turquoisestays.com/llms.txt): Turkish version: the same hotels and tours with Turkish descriptions and pages.

## Optional

- [Pre-Contractual Information](https://turquoisestays.com/en/hukuk/on-bilgilendirme.md)
- [Distance Sales Agreement](https://turquoisestays.com/en/hukuk/mesafeli-satis-sozlesmesi.md)
- [Privacy Notice (KVKK)](https://turquoisestays.com/en/hukuk/kvkk-aydinlatma-metni.md)
- [Marketing Consent Statement](https://turquoisestays.com/en/hukuk/ticari-ileti-acik-riza.md)
- [Cookie Policy](https://turquoisestays.com/en/hukuk/cerez-politikasi.md)
- [Cancellation & Refund Terms](https://turquoisestays.com/en/hukuk/iptal-ve-iade.md)
- [Sitemap](https://turquoisestays.com/sitemap.xml): all pages open to indexing (tr/en hreflang)
- [llms-full.txt](https://turquoisestays.com/en/llms-full.txt)
