Catawiki API & Scraper
The Catawiki API turns catawiki.com, Europe's weekly online auction house for watches, art, jewellery, classic cars, coins, wine and collectibles, into clean JSON in seven 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 returns open lots by keyword with the lot id, title, image, the current bid in EUR, GBP or USD, whether anyone has bid, the closing time, whether a reserve price is set and met, the buy-now price, free shipping and the auction id, filtered by category, reserve, free shipping, seller country and closing day and sorted by relevance, ending soon or newest. product/detail returns one lot in full, open or closed: description, every image, specifications such as brand, model, condition and year, the expert or retail estimate, the current or final bid, bid count, next minimum bid, reserve met, sold or not, the Buyer Protection fee and what it comes to on the current bid, shipping rates per country with delivery time and the total if won now for your country, the seller's name, pro or private status, score, feedback counts, objects sold and country, the curating experts and the last ten bids. lot/bids gives the full bid history, auction/lots lists every lot of an auction including closed ones with their sold or unsold result, category/products and categories browse the catalogue, and suggest returns Catawiki's own keyword suggestions. Verification on 2026-09-16 checked 8 lots across watches, art, jewellery and coins against the public lot page: title, current bid, open or closed, seller name, pro status, estimate and the experts matched on 8 of 8. No Catawiki account, no browser - one ReefAPI key and the standard { ok, data, meta, error } envelope.
On Catawiki a bid is not what the winner pays, and a closed lot is not always a sale
Every Catawiki lot has a bid, an estimate, a Buyer Protection fee and shipping, and they are four different numbers. A closed lot also has a last bid whether or not it sold: when the reserve price was not met there is no sale. This API keeps each figure in its own field. current_bid is the bid alone, buyer_protection_fee_amount is the fee on it, total_if_won_now adds shipping to the country you name, and sold_price is filled only when Catawiki marks the lot sold.
| Lot (checked 2026-09-16) | Bid | What the API returns | Why it matters |
|---|---|---|---|
| Rolex Oysterdate Precision, open lot | 1,600 EUR current bid | fee 147 EUR (9% + 3 EUR), shipping to Germany 25 EUR, total_if_won_now 1,772 EUR | The winner pays about 11% more than the bid |
| Vintage National desk lamp, closed | 57 EUR last bid | is_sold true, sold_price 57 EUR | A real sale result for price research |
| Red poppy jasper sphere, closed | 50 EUR last bid | is_sold false, reserve_price_met false, sold_price null, estimate 400-450 EUR | The bid never reached the reserve, so nothing sold |
| Diamond ring, open lot | current bid | experts_estimate type retail (Retail Estimate), kept apart from the bid | A retail estimate is not what the ring will sell for |
Figures are from lots read on 2026-09-15 and 2026-09-16; open-lot bids move with every bid. The fee on every lot measured was 9% plus 3 EUR (3 GBP, 3 USD in those currencies). Shipping is quoted per destination country and changes by country.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/catawiki/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "rolex",
"per_page": 24
}
}{
"ok": true,
"meta": {
"api": "catawiki",
"endpoint": "search",
"mode": "live",
"latency_ms": 1420.6,
"record_count": 24,
"bytes": 32059,
"cache_hit": false,
"bid_state": "ok",
"pagination": {
"page": 1,
"has_more": true,
"page_size": 24,
"total": 822
}
},
"data": {
"query": "rolex",
"lots": [
{
"lot_id": 106723305,
"title": "Rolex - Oysterdate Precision - No reserve price - 6694 - Men - 1972",
"subtitle": "Manual winding - Stainless steel",
"url": "https://www.catawiki.com/en/l/106723305-rolex-oysterdate-precision-no-reserve-price-6694-men-1972",
"image": "https://assets.catawiki.nl/assets/2026/9/9/a/0/e/a0e773e9-3d1b-4079-af43-50faf4b82987.jpg",
"thumbnail": "https://assets.catawiki.nl/assets/2026/9/9/a/0/e/thumb2_a0e773e9-3d1b-4079-af43-50faf4b82987.jpg",
"auction_id": 1263236,
"currency": "EUR",
"current_bid": 1700,
"has_bids": true,
"status": "open",
"is_sold": false,
"sold_price": null,
"reserve_price_set": false,
"reserve_price_met": null,
"buy_now_price_eur": null,
"buy_now_available": false,
"free_shipping": null,
"start_time": "2026-09-11T10:00:00Z",
"end_time": "2026-09-20T18:49:44Z",
"favorite_count": 138,
"explicit_content": false,
"bid_state": "ok",
"rating": null,
"review_count": null
},
{
"lot_id": 106767025,
"title": "Rolex - Datejust - 16233 - Men - 1990-1999",
"subtitle": "Automatic - Gold/Steel",
"url": "https://www.catawiki.com/en/l/106767025-rolex-datejust-16233-men-1990-1999",
"image": "https://assets.catawiki.nl/assets/2026/9/10/8/1/c/81cbf519-0839-461d-91a8-d51f253abc41.jpg",
"thumbnail": "https://assets.catawiki.nl/assets/2026/9/10/8/1/c/thumb2_81cbf519-0839-461d-91a8-d51f253abc41.jpg",
"auction_id": 1263181,
"currency": "EUR",
"current_bid": 5000,
"has_bids": true,
"status": "open",
"is_sold": false,
"sold_price": null,
"reserve_price_set": true,
"reserve_price_met": false,
"buy_now_price_eur": null,
"buy_now_available": false,
"free_shipping": null,
"start_time": "2026-09-11T16:00:00Z",
"end_time": "2026-09-17T18:54:05Z",
"favorite_count": 46,
"explicit_content": false,
"bid_state": "ok",
"rating": null,
"review_count": null
},
{
"lot_id": 106488791,
"title": "Rolex - Oyster Perpetual Datejust - No reserve price - Ref. 16233 - Men - 1993",
"subtitle": "Automatic - Steel, Yellow gold",
"url": "https://www.catawiki.com/en/l/106488791-rolex-oyster-perpetual-datejust-no-reserve-price-ref-16233-men-1993",
"image": "https://assets.catawiki.nl/assets/2026/9/1/3/f/6/3f69315f-202c-4f45-8d11-b45a7dd3016d.jpg",
"thumbnail": "https://assets.catawiki.nl/assets/2026/9/1/3/f/6/thumb2_3f69315f-202c-4f45-8d11-b45a7dd3016d.jpg",
"auction_id": 1263236,
"currency": "EUR",
"current_bid": 4800,
"has_bids": true,
"status": "open",
"is_sold": false,
"sold_price": null,
"reserve_price_set": false,
"reserve_price_met": null,
"buy_now_price_eur": null,
"buy_now_available": false,
"free_shipping": null,
"start_time": "2026-09-11T10:00:00Z",
"end_time": "2026-09-20T18:23:56Z",
"favorite_count": 66,
"explicit_content": false,
"bid_state": "ok",
"rating": null,
"review_count": null
}
],
"count": 24,
"total_results": 822,
"page": 1,
"has_more": true,
"fallback_results_dropped": 0,
"corrected_query": false,
"filters": {
"sort": "relevance",
"page": 1,
"per_page": 24
},
"language": "en",
"currency": "EUR"
}
}What the Catawiki API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search open Catawiki lots by keyword: lot id, title, image, the current bid in EUR, GBP or USD, whether anyone has bid, closing time, reserve price set and met, buy-now price, free shipping and the auction id. Filter by category, reserve, free shipping, seller country and closing day; sort by relevance, ending soon or newest. Unrelated padding shown for keywords with no results is dropped and counted. | Pricing teams call search to search open Catawiki lots by keyword. | query, category_id, include_fallback_results, page, per_page, ... |
| product/detail | One Catawiki lot in full, open or closed: title, description, every image, specifications (brand, model, condition, year…), the expert or retail estimate, the current or final bid, bid count, next minimum bid, reserve met, sold or not, buy-now price, the Buyer Protection fee and the fee on the current bid, shipping rates per country (and the total if won now for your country), delivery time, the seller (pro or private, score, feedback counts, objects sold, country), the curating experts and the last 10 bids. | Marketplace operators call product/detail to get one Catawiki lot in full, open or closed. | lot_id, shipping_country, language, currency, max_rotations |
| lot/bids | The full bid history of one Catawiki lot, newest first: amount in EUR, GBP or USD, time, the bidder's public pseudonym and country, and how many bids that bidder has placed on Catawiki. | Catalog enrichment teams call lot/bids to get the full bid history of one Catawiki lot, newest first. | lot_id, currency, max_rotations |
| auction/lots | Every lot of one Catawiki auction, open or already closed, with the auction's title, status and closing time and each lot's current or final bid, sold flag, reserve status and buy-now price - a closed auction is a list of real sale results. | Retail analysts call auction/lots to get every lot of one Catawiki auction, open or already closed, with the auction's title, status a…. | auction_id, page, per_page, language, currency, ... |
| category/products | Browse the open lots of one Catawiki category with live bids, the same row fields as search, and the same reserve, free shipping, seller country and closing day filters and sorts. | Pricing teams call category/products to get browse the open lots of one Catawiki category with live bids, the same row fields as search,…. | category_id, page, per_page, sort, reserve, ... |
| categories | Catawiki's category tree one level at a time: id, name, parent, link and how many auctions each category is running. | Marketplace operators call categories to get catawiki's category tree one level at a time. | level, parent_id, language, max_rotations |
| suggest | Catawiki's own keyword suggestions for the start of a search term. | Catalog enrichment teams call suggest to get catawiki's own keyword suggestions for the start of a search term.. | query, language, max_rotations |
Call search from your stack
curl -X POST https://api.reefapi.com/catawiki/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"rolex","per_page":24}'import requests
r = requests.post(
"https://api.reefapi.com/catawiki/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "rolex",
"per_page": 24
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/catawiki/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "rolex",
"per_page": 24
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.catawiki.search with {"query":"rolex","per_page":24}.Who uses this API and why
- Watch, art and collectibles dealers price stock from auction/lots on closed auctions and product/detail on closed lots, using what sold and what failed to reach its reserve.
- Buyers compare the real cost of a lot - bid, Buyer Protection fee and shipping to their own country - before bidding.
- Market trackers follow a brand or category sorted by ending_soon and read the bid history of the lots that matter.
- Cross-border resellers watch estimates against current bids to spot lots closing well below their expert range.
Questions developers ask before integrating
Can I get what Catawiki lots actually sold for?
Yes, for lots Catawiki still serves. product/detail on a closed lot returns is_sold, sold_price when it sold, the last bid, the bid count and whether the reserve was met. auction/lots on a closed auction returns every lot of that auction with the same sold or unsold result - for example 44 lots of a vintage lighting auction that closed on 2026-08-17. Catawiki has no search over closed lots, so this API does not offer one; closed results come from a lot id or an auction id.
Does the bid include the Buyer Protection fee and shipping?
No. current_bid is the bid only. product/detail returns buyer_protection_fee as Catawiki publishes it (9% plus a fixed 3 on every lot measured), buyer_protection_fee_amount for the current bid, shipping rates per country, and total_if_won_now - bid plus fee plus shipping - when you pass shipping_country. It is an estimate for this moment; the bid can still rise.
What does reserve_price_met mean?
Some sellers set a hidden minimum price. reserve_price_met is true once bidding has reached it, false while it has not, and null when the lot has no reserve. Catawiki never shows the reserve amount, so this API does not return one. A lot that closes with reserve_price_met false does not sell: is_sold is false and sold_price is null.
Which currencies and languages are supported?
Bids, estimates, fees and shipping come in EUR, GBP or USD, converted by Catawiki itself. Titles, descriptions, specifications and category names come in any of Catawiki's 18 languages: English, Dutch, German, French, Italian, Spanish, Portuguese, Danish, Swedish, Norwegian, Finnish, Polish, Hungarian, Romanian, Greek, Japanese and simplified or traditional Chinese. Unsupported values are rejected with a clear error.
What is the difference between the estimate and the bid?
experts_estimate is Catawiki's value range for a lot, with min, max and a type: expert for most categories, retail for jewellery (Retail Estimate). It is not a price and not a bid. In the check of 24 lots across six categories on 2026-09-16 the estimate was present on 18; classic cars and automobilia lots carried none.
Why did a search return no results but say fallback_results_dropped?
When Catawiki finds nothing for a keyword it fills the page with unrelated lots instead of saying so. This API drops those rows, returns an empty list and counts them in fallback_results_dropped; include_fallback_results=true returns them separately. A misspelling Catawiki corrects on its own, such as rolx, keeps its genuine Rolex results and sets corrected_query.
Who is the seller and are there reviews?
product/detail returns the seller's name, whether it is a pro or private seller, top-seller status, country, Catawiki's seller score out of 100 with the positive, neutral and negative feedback counts, objects sold and member since. Lots have no product reviews, so rating and review_count are null. Some sellers have no score yet, and score is then null rather than zero.
What does Catawiki NOT publish?
No reserve price amount, no barcode or GTIN, no product reviews, and no search over closed lots. Bidders appear only under Catawiki's own public handles such as Bidder 5192, with their country and bid count. Pickup-only lots have no shipping price.
What is the Catawiki API?
Catawiki API is a ReefAPI endpoint group for europe's weekly online auctions: live bids, expert estimates, reserve status, fees and shipping per country. It returns live JSON through POST requests under /catawiki/v1.
Is the Catawiki API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Catawiki calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Catawiki login or account?
No login to Catawiki 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 Catawiki 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 Catawiki API use?
Catawiki 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 Catawiki from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call catawiki actions with the same key, credit pool and JSON envelope used by normal REST requests.