Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Çiçeksepeti API page →
E-commerce & Marketplaces

Çiçeksepeti API & Scraper

The Çiçeksepeti API turns ciceksepeti.com, Turkey's flower, gift and multi-category marketplace, into clean JSON in four actions.

4 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 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.

search takes a keyword or a category slug, filters on a price range, free shipping and same-day delivery, pages 30 products at a time and offers the site's seven sort orders. Each row carries the product id and code, title, URL, image, the price, and either the struck was-price or the in-basket price label, kept apart, plus the site's delivery text and whether it is a marketplace listing. product/detail returns the whole product page: brand, price and VAT-free price, the struck price and discount when the page shows one, availability, the stock of the selected variant, every variant with its own price and availability, images, star rating and rating count, the seller and its Çiçeksepeti score for marketplace items, category path, breadcrumb, specification table, bouquet contents, description and the site's delivery badges such as same-day delivery. product/reviews pages through written reviews 20 at a time with the site's six orders and a star filter, and search/suggest returns the site's own autocomplete with category slugs. In a live check on 2026-09-15, 22 of 22 product calls succeeded, and on 22 product pages compared against the page itself the price, the struck price, the rating count and the seller matched on 22 of 22. Prices are TRY. No Çiçeksepeti account, no browser, one ReefAPI key and the standard { ok, data, meta, error } envelope.

Reference

Çiçeksepeti prints three kinds of price, and the API keeps them apart

A Çiçeksepeti product card shows either a price with a struck-through was-price, an in-basket price with a label such as "Sepet Fiyatı", or a single price. search returns price_type ('discounted', 'basket' or 'regular') so the three are never mixed, and product/detail publishes a was-price only when the page actually displays one.

ProductpriceWhat else the page showsAPI fields
20 red roses bouquet (sold by Çiçeksepeti)1,149.00 TRYstruck 1,349.00 TRY, %15price_before_discount 1349, discount_percent 15
Poco X8 Pro Max 12/256 GB (seller EVOFONE)38,999 TRY"Sepet Fiyatı" (in-basket price), no struck priceprice_type 'basket', basket_price_label, price_before_discount null
Merry See floral dress (seller Merry See)349.99 TRYstruck 600.00 TRY, %42, sizes S and M in stockvariants[] with Beden and available per size
54-piece gourmet chocolate box859.99 TRYone priceprice_before_discount null

The phone's page also carries a higher number in a hidden block that shoppers never see. Returning it as a was-price would invent a discount, so it is not returned. Search rows and product pages can also differ: one sneaker's search card showed a single price while its product page showed a struck price; product/detail follows the product page.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/ciceksepeti/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "query": "kırmızı gül"
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "ciceksepeti",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 739.4,
    "record_count": 30,
    "bytes": 26485,
    "cache_hit": false,
    "pagination": {
      "page": 1,
      "page_size": 30,
      "total": 731,
      "has_more": true
    }
  },
  "data": {
    "results": [
      {
        "position": 1,
        "product_id": 97730201,
        "product_code": "at5418",
        "variant_code": "at5418-1",
        "title": "Beyaz Buket Kağıdında 20'li Kırmızı Gül Buketi",
        "url": "https://www.ciceksepeti.com/beyaz-buket-kagidinda-20li-kirmizi-gul-buketi-at5418",
        "image": "https://cdn03.ciceksepeti.com/cicek/at5418-1/M/beyaz-buket-kagidinda-20-li-kirmizi-gul-buketi-at5418-a857ab8a-794c-4068-b28f-c5880b310ad2.png",
        "price": 1149,
        "price_display": "1.149,00 TL",
        "price_type": "discounted",
        "price_before_discount": 1349,
        "price_outside_basket": null,
        "basket_price_label": null,
        "discount_percent": 15,
        "currency": "TRY",
        "search_index_rating": 3.3,
        "search_index_rating_count": 4032,
        "rating_scale": 5,
        "delivery_text": "Aynı Gün Ücretsiz Teslimat",
        "badge": null,
        "category_id": 225,
        "category_path": [
          {
            "id": "[trimmed-depth]",
            "name": "[trimmed-depth]"
          },
          {
            "id": "[trimmed-depth]",
            "name": "[trimmed-depth]"
          }
        ],
        "is_marketplace": false,
        "is_personalized": false,
        "is_bundle": false,
        "has_image_reviews": false
      },
      {
        "position": 2,
        "product_id": 179552508,
        "product_code": "at6144",
        "variant_code": "at6144-1",
        "title": "Kraft Bukette 21 Kırmızı Gül ve Fenix Bitkisi",
        "url": "https://www.ciceksepeti.com/kraft-bukette-21-kirmizi-gul-ve-fenix-bitkisi-at6144",
        "image": "https://cdn03.ciceksepeti.com/cicek/at6144-1/M/kraft-bukette-21-kirmizi-gul-ve-fenix-bitkisi-at6144-c01459a9-c056-43ca-970c-69d0c9256f82.png",
        "price": 1249,
        "price_display": "1.249,00 TL",
        "price_type": "discounted",
        "price_before_discount": 1449,
        "price_outside_basket": null,
        "basket_price_label": null,
        "discount_percent": 14,
        "currency": "TRY",
        "search_index_rating": 3.5,
        "search_index_rating_count": 965,
        "rating_scale": 5,
        "delivery_text": "Aynı Gün Ücretsiz Teslimat",
        "badge": null,
        "category_id": 225,
        "category_path": [
          {
            "id": "[trimmed-depth]",
            "name": "[trimmed-depth]"
          },
          {
            "id": "[trimmed-depth]",
            "name": "[trimmed-depth]"
          }
        ],
        "is_marketplace": false,
        "is_personalized": false,
        "is_bundle": false,
        "has_image_reviews": false
      },
      {
        "position": 3,
        "product_id": 4275290,
        "product_code": "at4036",
        "variant_code": "at4036-1",
        "title": "50 Kırmızı Gül Çiçek Demeti",
        "url": "https://www.ciceksepeti.com/50-kirmizi-gul-cicek-demeti-at4036",
        "image": "https://cdn03.ciceksepeti.com/cicek/at4036-1/M/50-kirmizi-gul-cicek-demeti-at4036-d9832a59-b57d-41b7-9b30-80eaf4be0a4a.png",
        "price": 2749,
        "price_display": "2.749,00 TL",
        "price_type": "discounted",
        "price_before_discount": 2999,
        "price_outside_basket": null,
        "basket_price_label": null,
        "discount_percent": 8,
        "currency": "TRY",
        "search_index_rating": 3.8,
        "search_index_rating_count": 3298,
        "rating_scale": 5,
        "delivery_text": "Aynı Gün Ücretsiz Teslimat",
        "badge": null,
        "category_id": 225,
        "category_path": [
          {
            "id": "[trimmed-depth]",
            "name": "[trimmed-depth]"
          },
          {
            "id": "[trimmed-depth]",
            "name": "[trimmed-depth]"
          }
        ],
        "is_marketplace": false,
        "is_personalized": false,
        "is_bundle": false,
        "has_image_reviews": false
      }
    ],
    "count": 30,
    "total_results": 731,
    "total_pages": 25,
    "page": 1,
    "page_size": 30,
    "has_next_page": true,
    "delivery_type": "Servis",
    "page_notice": null,
    "duplicate_rows_dropped": 0,
    "listing_url": "https://www.ciceksepeti.com/arama?query=k%C4%B1rm%C4%B1z%C4%B1%20g%C3%BCl"
  }
}
Actions

What the Çiçeksepeti API does

ActionDescriptionConcrete use caseKey params
searchSearch ciceksepeti.com by keyword, or browse a Çiçeksepeti category, with price range, free shipping, same-day delivery and the site's seven sort orders, 30 products a page. Each row: product id and code, title, URL, image, the price, the struck price or the in-basket price label (kept apart), discount, the site's delivery text and badge, category path, marketplace flag and the search index's rating.Pricing teams call search to search ciceksepeti.com by keyword, or browse a Çiçeksepeti category, with price range, free s….query, category, page, sort, price_min, ...
product/detailThe full Çiçeksepeti product page by URL or product code: title, brand, price, VAT-free price, struck price and discount when shown, in-basket price label, availability and stock of the selected variant, every variant with its own price and availability, images, star rating and count, seller and seller score for marketplace items, category path, breadcrumb, specification table, bouquet contents, description, and the site's delivery / sales badges.Marketplace operators call product/detail to get the full Çiçeksepeti product page by URL or product code.url, product_code, max_rotations
product/reviewsWritten reviews of a Çiçeksepeti product, 20 per call, with the site's six review orders, a star filter and cursor paging: star rating, text, date, reviewer's city and 'helpful' votes. Reviewer names are not returned.Catalog enrichment teams call product/reviews to get written reviews of a Çiçeksepeti product, 20 per call, with the site's six review orders, a s….product_id, product_code, url, sort, rating, ...
search/suggestÇiçeksepeti's own search autocomplete for a partial keyword: suggested categories with their slug (usable as `category` in search) and the query the site would run.Retail analysts call search/suggest to get çiçeksepeti's own search autocomplete for a partial keyword.query, max_rotations
Code samples

Call search from your stack

curl -X POST https://api.reefapi.com/ciceksepeti/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"kırmızı gül"}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.ciceksepeti.search with {"query":"kırmızı gül"}.
Use cases

Who uses this API and why

  • Gift and flower price monitoring across Turkey's largest flower marketplace, with struck prices and in-basket prices kept apart.
  • Marketplace sellers track competitors' prices, discounts, seller scores and ratings by category.
  • Fashion and home catalog teams pull variants with per-size availability, the specification table and descriptions.
  • Review analysis on bouquets and gifts: star filters, newest-first paging and helpful votes.
FAQ

Questions developers ask before integrating

Which price is the one I pay?

price. On a 'discounted' row it is the sale price and price_before_discount is the struck price the card shows. On a 'basket' row it is the in-basket price, basket_price_label holds the site's label ("Sepet Fiyatı", "Sepette %6 İndirim") and price_outside_basket holds the higher price when the card prints it. On a 'regular' row there is one price. product/detail also returns price_excluding_vat.

Does a flower's availability depend on the city?

Delivery of flowers is city-bound on Çiçeksepeti, and this API reads the site's default view without choosing a delivery address. availability and the delivery badges (for example "Aynı Gün Ücretsiz Teslimat") are what that default view shows. same_day in search is the site's own same-day filter. Checking whether one exact district can receive a bouquet today is not part of this API.

How do variants work?

variants[] lists this product's own variants, such as sizes, each with its options, price, struck price and whether it can be ordered, plus sibling products the page shows as colour swatches. Siblings have is_this_product false, their own product_code and URL, and only their colour. stock_count is the stock of the variant the page opens on, named in stock_variant_code; for the floral dress that was size S with 26, while M had 29 and four sizes were unavailable.

Why is the rating on a search row called search_index_rating?

Because it can differ from the product page, slightly. On 2026-09-15 the search row's rating count differed from the product page's on 5 of 16 rated products compared, for example 3999 against 3998 and 942 against 939 (the star rating itself matched on all 16). product/detail returns rating and rating_count exactly as the product page prints them.

What does a search for a made-up word return?

An empty results list. The website fills that page with unrelated recommendations; those are not results and are not returned. A page past the last page is also returned empty with page_notice, where the website would silently show page 1 again.

How do I page through reviews?

Call product/reviews with product_id, product_code or url. Each call returns 20 reviews, has_more and next_cursor; pass next_cursor to get the next 20. sort takes recommended, newest, oldest, rating_desc, rating_asc or most_liked, and rating keeps only one star level. Each review has its star rating, text, date, the reviewer's city and its helpful votes. Reviewer names are not returned.

What does Çiçeksepeti not publish?

Other sellers' offers for the same product (a product listed by two shops appears as two separate products with their own codes), a barcode or GTIN, per-variant stock for every size (only the opened variant's stock is on the page), a maximum for the seller score, and brand on some marketplace items. Some products carry a placeholder instead of a stock count (9999, or a number above two billion); stock_count is null for those rather than a number nobody has in a warehouse. Unrated products return null rating and count, never 0.

What is the Çiçeksepeti API?

Çiçeksepeti API is a ReefAPI endpoint group for turkish flowers, gifts and marketplace: prices, struck and in-basket prices, variants, sellers and reviews. It returns live JSON through POST requests under /ciceksepeti/v1.

Is the Çiçeksepeti API free to try?

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

Do I need a Çiçeksepeti login or account?

No login to Çiçeksepeti 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 Çiçeksepeti data?

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

How many credits does the Çiçeksepeti API use?

Çiçeksepeti actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call Çiçeksepeti from an AI assistant or MCP client?

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

Is the Çiçeksepeti API a Çiçeksepeti scraper?

It is the managed alternative to a DIY Çiçeksepeti 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 turkish flowers, gifts and marketplace: prices, struck and in-basket prices, variants, sellers and reviews back as clean JSON.

docs / ciceksepeti

Çiçeksepeti

Turkish flowers, gifts and marketplace: prices, struck and in-basket prices, variants, sellers and reviews.

base /ciceksepeti/v14 endpoints
post/ciceksepeti/v1/product/detail1 credit

The full Çiçeksepeti product page by URL or product code: title, brand, price, VAT-free price, struck price and discount when shown, in-basket price label, availability and stock of the selected variant, every variant with its own price and availability, images, star rating and count, seller and seller score for marketplace items, category path, breadcrumb, specification table, bouquet contents, description, and the site's delivery / sales badges.

ParameterAllowed / rangeDescription
urloptionalA ciceksepeti.com product URL (…-<code>). Every search row returns one as `url`.
product_codeoptionalAlternative to `url`: the product code at the end of the product URL ('kcm74954793', 'at5418'). Every search row returns it as `product_code`.
max_rotations = 4optional1–8Advanced: how many times to retry a difficult request (1-8, default 4).
Try in playground →
post/ciceksepeti/v1/product/reviews1 credit

Written reviews of a Çiçeksepeti product, 20 per call, with the site's six review orders, a star filter and cursor paging: star rating, text, date, reviewer's city and 'helpful' votes. Reviewer names are not returned.

ParameterAllowed / rangeDescription
product_idoptional1–Alternative to `url`/`product_code`: the numeric product_id a search row or product/detail returns.
product_codeoptionalAlternative to `url`: the product code at the end of the product URL ('kcm74954793', 'at5418'). Every search row returns it as `product_code`.
urloptionalA ciceksepeti.com product URL (…-<code>). Every search row returns one as `url`.
sort = recommendedoptionalrecommended · newest · oldest · rating_desc · rating_asc · most_likedOrder of the reviews — the six orderings the site's review page offers.
ratingoptional1–5Only reviews with this many stars (1-5).
cursoroptionalPaging token: pass the `next_cursor` of the previous response to get the next 20 reviews. Omit for the first page.
max_rotations = 4optional1–8Advanced: how many times to retry a difficult request (1-8, default 4).
Try in playground →
post/ciceksepeti/v1/search/suggest1 credit

Çiçeksepeti's own search autocomplete for a partial keyword: suggested categories with their slug (usable as `category` in search) and the query the site would run.

ParameterAllowed / rangeDescription
queryrequiredWhat the user has typed so far (2+ characters).
max_rotations = 4optional1–8Advanced: how many times to retry a difficult request (1-8, default 4).
Try in playground →