Ç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.
🤖 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.
Ç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.
| Product | price | What else the page shows | API fields |
|---|---|---|---|
| 20 red roses bouquet (sold by Çiçeksepeti) | 1,149.00 TRY | struck 1,349.00 TRY, %15 | price_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 price | price_type 'basket', basket_price_label, price_before_discount null |
| Merry See floral dress (seller Merry See) | 349.99 TRY | struck 600.00 TRY, %42, sizes S and M in stock | variants[] with Beden and available per size |
| 54-piece gourmet chocolate box | 859.99 TRY | one price | price_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.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"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"
}
}{
"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"
}
}What the Çiçeksepeti API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search 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/detail | 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. | Marketplace operators call product/detail to get the full Çiçeksepeti product page by URL or product code. | url, product_code, max_rotations |
| product/reviews | 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. | 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 |
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"}'import requests
r = requests.post(
"https://api.reefapi.com/ciceksepeti/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "kırmızı gül"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/ciceksepeti/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "kırmızı gül"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.ciceksepeti.search with {"query":"kırmızı gül"}.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.
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.