Catawiki APIcatawiki.com ↗
Search live Catawiki auction lots by keyword, get current bids in EUR/USD/GBP, expert estimates, shipping rates, and full lot detail via 2 endpoints.
What is the Catawiki API?
The Catawiki API provides 2 endpoints for querying live auction lots on catawiki.com. The search_lots endpoint returns real-time bid prices in EUR, USD, and GBP, seconds remaining, reserve status, seller-provided shipping costs to a specified destination country, and facets for filtering by category, closing date, and more. The get_lot endpoint adds expert estimate ranges, full image arrays, and detailed seller profile data for a single lot.
curl -X GET 'https://api.parse.bot/scraper/27aceb17-15a0-4fef-8641-61a59752a83e/search_lots?sort=time_remaining&query=rolex&ship_to=nl&per_page=5' \ -H 'X-API-Key: $PARSE_API_KEY'
Keyword search over live Catawiki auction lots. Each row is one lot with its live current bid (EUR/USD/GBP), bidding start/end times, seconds left, reserve status, favourite count and, unless include_shipping=false, the seller's shipping rate to the ship_to country taken from the lot's own shipping-rate table (falls back to the seller's 'Rest of European Union' or 'Anywhere else' rate when the exact country is not listed; null when the seller lists none). The default sort is time_remaining (soonest closing first). Paginated via page and per_page (1-48, default 24, default page 1); total is the site's own match count and has_more is page*per_page < total. Cost: one search request, one bidding request, plus one shipping request per lot when include_shipping is on, so a full page of 48 with shipping is 50 round trips. Filters (free_shipping, no_reserve, seller_location, category_id, closing_date) are applied upstream; valid ids/codes for seller_location, category_id and closing_date are listed in the returned facets. Note: for a keyword the site has no direct matches for, Catawiki returns a small set of loosely 'related' objects rather than an empty list, exactly as its website does. Facets are limited to the category, reserve, free-shipping, closing-date and seller-location groups.
| Param | Type | Description |
|---|---|---|
| page | integer | 1-based results page. |
| sort | string | Result ordering; time_remaining puts the soonest-closing lots first. |
| queryrequired | string | Free-text search keywords (brand, model, artist...). |
| ship_to | string | 2-letter lowercase ISO country code of the delivery destination used to pick the shipping rate (e.g. nl, de, be). |
| per_page | integer | Lots per page, clamped to 1-48. Also bounds the number of per-lot shipping lookups. |
| no_reserve | boolean | true = only lots without a reserve price. Omitted = no filter. |
| category_id | string | Numeric Catawiki category id (values appear in facets[id=l2_categories].values[*].id, e.g. 343 = Rolex Watches). Omitted = no filter. |
| closing_date | string | ISO date YYYY-MM-DD; only lots whose bidding closes on that calendar day (available days appear in facets[id=bidding_end_days] as YYYYMMDD ids). Omitted = no filter. |
| free_shipping | boolean | true = only lots with free shipping everywhere. Omitted = no filter. |
| seller_location | string | 2-letter lowercase country code of the seller (values appear in facets[id=seller_location].values[*].id, e.g. nl). Omitted = no filter. |
| include_shipping | boolean | When false, skips the per-lot shipping lookups and every lot's shipping field is null (fast, 2 round trips). |
{
"type": "object",
"fields": {
"lots": "array of lot rows: lot_id (string, pass to get_lot), title, subtitle, url, image_url, auction_id, current_bid {EUR,USD,GBP} numbers, bidding_start_time / bidding_end_time (ISO 8601 UTC), seconds_left (int, computed at call time), closed, reserve_price_set, reserve_price_met (null when no reserve), favorite_count, buy_now_available, shipping (null when include_shipping=false or lookup failed) {to {region_code, region_name, price (major currency units), currency}, estimated_delivery_days [{from_days,to_days}], is_pickup_only, combined_shipping_allowed}",
"page": "page returned",
"sort": "sort order applied",
"query": "echo of the search keywords",
"total": "site-reported number of matching lots",
"facets": "array of {id, name, values[{id,name,count}]} for the category, reserve, free-shipping, closing-date and seller-location filter groups",
"ship_to": "destination country code used for shipping rates",
"has_more": "true when a further page exists",
"per_page": "page size applied after clamping",
"shipping_coverage": "requested / fetched counts of per-lot shipping lookups and a failed list of {lot_id, status_code}"
},
"sample": {
"data": {
"lots": [
{
"url": "https://www.catawiki.com/en/l/107135360-rolex-oyster-perpetual-day-date-118239-unisex-2006",
"title": "Rolex - Oyster Perpetual Day-Date - 118239 - Unisex - 2006",
"closed": false,
"lot_id": "107135360",
"shipping": {
"to": {
"price": 69,
"currency": "EUR",
"region_code": "nl",
"region_name": "The Netherlands"
},
"is_pickup_only": false,
"estimated_delivery_days": [
{
"to_days": 14,
"from_days": 7
}
],
"combined_shipping_allowed": false
},
"subtitle": "Automatic - White gold",
"image_url": "https://assets.catawiki.nl/assets/2026/6/17/0/a/5/0a597ce0-8616-4b46-a04f-c5befaa84081.jpg",
"auction_id": "1296076",
"current_bid": {
"EUR": 13200,
"GBP": 11351,
"USD": 15004
},
"seconds_left": 78033,
"favorite_count": 26,
"bidding_end_time": "2026-10-01T18:01:00Z",
"buy_now_available": false,
"reserve_price_met": false,
"reserve_price_set": true,
"bidding_start_time": "2026-09-25T16:00:00Z"
}
],
"page": 1,
"sort": "time_remaining",
"query": "rolex",
"total": 782,
"facets": [
{
"id": "reserve_price",
"name": "Reserve price",
"values": [
{
"id": "1",
"name": "Reserve price",
"count": 636
},
{
"id": "0",
"name": "No reserve price",
"count": 146
}
]
}
],
"ship_to": "nl",
"has_more": true,
"per_page": 5,
"shipping_coverage": {
"failed": [],
"fetched": 5,
"requested": 5
}
},
"status": "success"
}
}About the Catawiki API
Searching Auction Lots
The search_lots endpoint accepts a query string and returns a paginated list of matching live lots. Each row exposes lot_id, title, subtitle, url, image_url, auction_id, and a current_bid object with EUR, USD, and GBP values. Bidding start and end times, seconds remaining, a no_reserve flag, and a favourite count are included per lot. You can sort results by time_remaining (soonest-closing first), recently added, or relevance, and filter by category_id, closing_date (ISO date), or no_reserve=true. Page size is controlled by per_page (1–48).
Shipping Rate Lookups
Pass a 2-letter ISO country code via the ship_to parameter (e.g. nl, de, gb) to include the seller's quoted shipping rate to that destination in each lot row. The shipping_coverage field in the response reports how many of the requested lots returned a shipping figure and lists any {lot_id, status_code} pairs that failed. Setting include_shipping=false disables per-lot shipping lookups if that latency is not needed. The ship_to code used is echoed back in the top-level response.
Facets and Full Lot Detail
The facets array in search_lots responses contains filter groups — category, reserve status, free shipping, closing date, and seller location — each with id, name, and values[{id, name, count}]. The category_id values found in facets (e.g. 343 for Rolex Watches) can be fed back as a filter on subsequent calls. For a single lot, get_lot accepts the lot_id emitted by search_lots and returns the full seller profile (name, country, is_pro, score_percent, review_count, objects_sold), the auction context (id, title, status), expert estimate {min_eur, max_eur}, a full images array, and a closed boolean indicating whether bidding has ended.
The Catawiki API is a managed, monitored endpoint for catawiki.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when catawiki.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official catawiki.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Track the closing prices of specific collectible categories by polling
search_lotssorted bytime_remaining. - Build a cross-currency bid tracker using the
current_bidEUR/USD/GBP fields returned per lot. - Compare seller shipping costs to different destination countries by varying the
ship_toparameter. - Alert users when lots matching a keyword have no reserve price using the
no_reservefilter. - Aggregate expert estimate ranges (
min_eur,max_eurfromget_lot) against final hammer prices for valuation research. - Filter upcoming lots closing on a specific date using the
closing_dateparameter alongside a category facet. - Build a seller reputation tool using the
score_percent,review_count, andobjects_soldfields fromget_lot.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Catawiki offer an official developer API?+
What bid price data does `search_lots` return, and in which currencies?+
search_lots returns a current_bid object per lot with three fields: the EUR, USD, and GBP equivalent of the live bid at the time of the request. Bidding start and end timestamps and a seconds_left value are also included so you can compute urgency without additional calls.Does the API return historical sold prices or completed auction results?+
What are the pagination limits for `search_lots`?+
per_page is clamped to a maximum of 48 lots per request. The has_more boolean indicates whether additional pages exist, and page is 1-based. The total field gives the site-reported count of matching lots across all pages, which you can use to calculate pagination depth before fetching.Can I retrieve all lots in a specific category without a keyword query?+
query parameter is required for search_lots. You can narrow results to a category using category_id (values come from the facets array), but a keyword string must still be provided. Browse-by-category without a search term is not currently supported. You can fork this API on Parse and revise it to add a category-browse endpoint.