Kitantik API & Scraper
Kitantik is the Turkish marketplace where second-hand booksellers (sahaf) and antique dealers list rare and used books, periodicals, postcards, coins, banknotes, stamps, records and collectibles, and where those shops also run timed auctions (mezat / müzayede).
🤖 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.
This API reads it as JSON. `search` takes Turkish free text, a category, a shop, and the site's own filters: new or second-hand, auction lots only, with or without photo, binding, book features such as signed or first edition, a lira price range (min_price, max_price) and eight sort orders. `product` returns one listing in full: title, authors, publisher, year, every printed attribute (pages, binding, language, translator, place of print, dimensions, weight), condition and grade, price with the shop discount, stock, who pays shipping and the fee, all photos and the shop block with its rating, review count, completed orders and success rate. `auctions` lists open or finished auctions, `auction_lots` reads one auction's lots with starting bid, current bid, bid count, watchers and time left, and `lot_prices` refreshes the bids of up to 50 lots in one call. On 2026-10-07 a search for "roman" alone matched 457,587 listings and 51 shop auctions were open.
What a Kitantik field actually contains
Fields that read differently from how they look. Every row was measured against live Kitantik pages on 2026-10-07.
| Field | What it holds |
|---|---|
| price_try | The price the page prints, after the shop's own discount. Kitantik writes it Turkish style ("1.250,00 TL" is 1,250 lira). In 36 checks over 22 different fixed-price listings it matched the search card, the product page and the page's structured data every time. |
| original_price_try, store_discount_pct | The struck-through price and the shop's discount percentage when a shop runs one ("% 20 Mağaza indirimi"). Null when there is no discount. |
| is_auction (search) | True for a listing that is in a running auction. Auction cards print "Müzayede" instead of a price, so price_try is null on them; the bids come from auction_lots, lot_prices or product. |
| schema_price_try | The price in the page's structured data. For a fixed listing it equals price_try. For an auction lot it is the item's own list price, not a bid: one lot carried 750 TL there while it opened at 50 TL. |
| auction.bids | starting_bid_try, current_bid_try (null until someone bids), bid_count, watcher_count, buy_it_now_price_try (null when the lot has no buy-it-now) and remaining_text, the time left as the site prints it. |
| shipping_paid_by, shipping_fee_try | "Alıcı Öder" (buyer pays) with the fee in lira and the carrier, or seller-paid shipping with no fee. The fee is the number the page states for that listing. |
| condition, condition_grade | condition is İkinci El (second-hand) or Yeni (new); condition_grade is the shop's own grade such as "Çok iyi" or "İyi". |
| seller | The shop: name, store_id, link, average rating and the number of reviews behind it, completed orders, success rate, the order value above which shipping is free, shops it shares shipping with, and its own about text. No e-mail or phone: Kitantik does not print them. |
| lot_status | in_auction while the auction runs. After an auction closes, unsold lots come back as ordinary listings with a fixed price (listed_after_auction); the final hammer price is not published. |
Search reaches the first 501 pages of 20 results (10,020 listings) of any query; narrow with a category, shop or filter to see the rest. The total is Kitantik's own count.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/kitantik/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "nutuk"
}
}{
"ok": true,
"meta": {
"api": "kitantik",
"endpoint": "search",
"mode": "live",
"latency_ms": 2308.5,
"record_count": 20,
"bytes": 204961,
"cache_hit": false,
"upstream_requests": 1,
"charged_credits": 3,
"version": "1.0.0",
"request_id": "c0f83b47519e45e1",
"queue_ms": 1.7,
"fetched_at": "2026-10-07T15:52:10.749Z"
},
"data": {
"total": 3786,
"reachable_total": 3786,
"page": 1,
"page_size": 20,
"last_page": 190,
"has_more": true,
"sort": "relevance",
"products": [
{
"product_id": "1br9qfyl4pl86k61x08",
"title": "TÜRKİYE CUMHURİYET TARİHİ + NUTUK",
"url": "https://www.kitantik.com/product/TURKIYE-CUMHURIYET-TARIHI-NUTUK_1br9qfyl4pl86k61x08",
"image": "https://s3.cloud.ngn.com.tr/kitantik/images/2022-06-22/1br9qfyl4pj0rk11gt4-thumb.jpg",
"kind": "book",
"subtitle": "tü5rkiye cumhuriyeti tarih nutuk, Belge Yayınları",
"condition": "İkinci El",
"store_name": "eskidunyasi",
"is_auction": false,
"price_try": 250,
"original_price_try": null,
"store_discount_pct": null,
"price_display": "250,00 TL",
"list_price_try": 250,
"category_path": [
"Kitap",
"Tarih",
"Tarih Bilimi"
],
"currency": "TRY"
},
{
"product_id": "1br9qfwldbyyb0417ct",
"title": "NUTUK NEDİR NE DEĞİLDİR-AHMET KÖKLÜGİLLER",
"url": "https://www.kitantik.com/product/NUTUK-NEDIR-NE-DEGILDIR-AHMET-KOKLUGILLER_1br9qfwldbyyb0417ct",
"image": "https://s3.cloud.ngn.com.tr/kitantik/images/2023-01-26/1br9qfwldbyyb0417cq-thumb.jpeg",
"kind": "book",
"subtitle": "NUTUK NEDİR NE DEĞİLDİR-AHMET KÖKLÜGİLLER",
"condition": "İkinci El",
"store_name": "Yonca_Kitabevi",
"is_auction": false,
"price_try": 98,
"original_price_try": null,
"store_discount_pct": null,
"price_display": "98,00 TL",
"list_price_try": 98,
"category_path": [
"Kitap",
"Edebiyat, Kurgu",
"Diğer"
],
"currency": "TRY"
},
{
"product_id": "1br9qfwmt2uya5u1i2a",
"title": "Çocuklar İçin Nutuk Mustafa Kemal Atatürk",
"url": "https://www.kitantik.com/product/Cocuklar-Icin-Nutuk-Mustafa-Kemal-Ataturk_1br9qfwmt2uya5u1i2a",
"image": "https://s3.cloud.ngn.com.tr/kitantik/images/2026-08-21/1br9qfwmt2uya5u1i26-thumb.jpeg",
"kind": "book",
"subtitle": "Çocuklar İçin Nutuk Mustafa Kemal Atatürk, REN COCUK",
"condition": "İkinci El",
"store_name": "Sanal Çerci",
"is_auction": false,
"price_try": 55,
"original_price_try": null,
"store_discount_pct": null,
"price_display": "55,00 TL",
"list_price_try": 55,
"category_path": [
"Kitap",
"Tarih"
],
"currency": "TRY"
}
],
"categories": [
{
"category_id": 181,
"name": "Kitap",
"count": 3645,
"level": "root"
},
{
"category_id": 550,
"name": "Tarih",
"count": 2462,
"level": "child"
},
{
"category_id": 417,
"name": "Süreli Yayınlar",
"count": 516,
"level": "child"
}
]
}
}What the Kitantik API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search kitantik.com listings — second-hand and rare books, antiques, ephemera, coins, stamps, postcards, records — by keyword, category or shop, with the site's own filters. Needs at least one of query, category_id or store_id. | Pricing teams call search to search kitantik.com listings. | query, category_id, store_id, condition, listing_type, ... |
| product | Full listing page: title, authors, publisher, year, every printed attribute (pages, binding, language, dimensions, weight…), condition and grade, price and store discount, stock, shipping payer/carrier/fee, all photos, the shop block (rating, review count, completed orders, success rate) and, for an auction lot, the live bid state. | Marketplace operators call product to get full listing page. | product_id |
| auctions | Auctions (mezat / müzayede) run by kitantik shops — open ones or the archive: title, shop, description, closing time, number of lots. | Catalog enrichment teams call auctions to get auctions (mezat / müzayede) run by kitantik shops. | status, query, sort, page, per_page |
| auction_lots | One auction's lots with their live bids: lot number, title, photo, grade, starting bid, current bid, bid and watcher counts, buy-it-now price, time left. | Retail analysts call auction_lots to get one auction's lots with their live bids. | auction_id |
| lot_prices | Live bid state for up to 50 auction lots in one call — the cheap way to watch lots you already found. | Pricing teams call lot_prices to get live bid state for up to 50 auction lots in one call. | auction_product_ids |
Call search from your stack
curl -X POST https://api.reefapi.com/kitantik/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"nutuk"}'import requests
r = requests.post(
"https://api.reefapi.com/kitantik/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "nutuk"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/kitantik/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "nutuk"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.kitantik.search with {"query":"nutuk"}.Who uses this API and why
- Price rare and second-hand Turkish books: search a title or author, filter signed or first edition and track TL prices across shops.
- Watch live coin, stamp and banknote auctions and alert on lots still at their opening bid near closing time.
- Build a dealer directory of Turkish booksellers and antique shops with rating, review count, completed orders and stock size.
- Monitor how often a title appears for sale and at what condition grade, for a collector's want list.
- Feed a cataloguing tool with publisher, year, translator, page count, binding and dimensions of Turkish editions.
Questions developers ask before integrating
Do I need a Kitantik account?
No. Everything is read logged out: listings, shops, auctions and the current bids. Placing a bid and the bid history need an account and are not part of this API.
Can I follow an auction while it runs?
Yes. auction_lots gives every lot with its auction_product_id and current bid; pass up to 50 of those ids to lot_prices for a cheap refresh of starting bid, current bid, bid count, watchers and time left.
What happens to a lot when the auction ends?
The auction moves to the archive (auctions with status=closed). Lots that did not sell are re-listed by the shop at a fixed price and show lot_status listed_after_auction; Kitantik does not publish the hammer price.
Can I search only signed or first-edition books?
Yes, features=signed or features=first_edition. For "roman" that narrowed 457,587 listings to 4,777 signed and 28,466 first editions. Leather bindings: 392.
How do I get one shop's whole stock?
Every product carries seller.store_id; pass it to search as store_id, alone or with a query. One Ankara shop we measured had 17,734 live listings.
Which categories are covered?
All three roots: Kitap (books, category_id 181), Efemera, Müzik, Sinema (ephemera, coins, stamps, postcards, records, 103) and Antika-Koleksiyon, Hobi-Sanat (antiques and collectibles, 1). Every search returns the category facet with ids and counts.
How deep can I page?
Up to page 501 of 20 results. Past that Kitantik itself stops answering, so reachable_total and last_page tell you where the window ends.
Are authors and publishers available for antiques too?
Only for books. Antiques and ephemera carry title, grade, description, attributes when the shop fills them, price and photos; author, publisher and year were empty on all 9 non-book items we read.
What is the Kitantik API?
Kitantik API is a ReefAPI endpoint group for turkey's rare-book and antiques marketplace: second-hand books, ephemera, coins, stamps and live shop auctions with current bids. It returns live JSON through POST requests under /kitantik/v1.
Is the Kitantik API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Kitantik calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Kitantik login or account?
No login to Kitantik 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 Kitantik 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 Kitantik API use?
Kitantik actions currently cost 1-3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call Kitantik from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call kitantik actions with the same key, credit pool and JSON envelope used by normal REST requests.