Chrono24 watch search
Watch listings on Chrono24 for keywords, with the site's sort, condition, price range, currency, dealer country, year of production, case size, box and papers, in-stock and Certified filters. Each listing: id, title, subtitle (often the reference), price and price label, currency, shipping note, dealer country code and name, seller type, Certified label, badges, link and images. 60 per page; total is the site's count. Pass next_page back as page; null on the last page.
Every response includes credits_used: the credits this call cost.
Parameters
| name | type | description |
|---|---|---|
qrequired | string | Keywords, e.g. rolex submariner. Example: rolex submariner |
sort | relevance | price_asc | price_desc | newest | relevance (default), price_asc, price_desc, newest. |
condition | new | used | new or used. |
price_min | string | Lowest price, whole units of currency. |
price_max | string | Highest price, whole units of currency. |
currency | USD | EUR | GBP | CHF | CAD | AUD | JPY | HKD | SGD | AED | Price currency: USD (default), EUR, GBP, CHF, CAD, AUD, JPY, HKD, SGD, AED. |
dealer_country | string | Only listings from sellers in this country (two-letter code), e.g. US. |
year_min | integer | Produced in or after this year. A range spans at most 80 years; year_max alone covers the 80 years before it. |
year_max | integer | Produced in or before this year. |
case_diameter | string | Case size in mm, one or more comma-separated (either matches), e.g. 40,41. |
box_papers | boolean | true: only watches with original box and original papers. |
in_stock | boolean | true: only items the seller has in stock. |
certified | boolean | true: only Chrono24 Certified listings. |
page | integer | Page number (up to 100). Pass next_page from the previous response. |
Every endpoint also takes fresh, raw, fields (see lean responses and caching).
Example
curl "https://api.api.sh/chrono24/v1/search?q=rolex+submariner" \
-H "x-api-key: $APISH_KEY" import os, requests
res = requests.get(
"https://api.api.sh/chrono24/v1/search",
params={"q": "rolex submariner"},
headers={"x-api-key": os.environ["APISH_KEY"]},
timeout=120,
)
res.raise_for_status()
data = res.json() const url = new URL("https://api.api.sh/chrono24/v1/search");
url.searchParams.set("q", "rolex submariner");
const res = await fetch(url, { headers: { "x-api-key": process.env.APISH_KEY } });
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const data = await res.json(); Response
A JSON object with the fields described above, plus raw (the source's own data), cached, fetched_at and credits_used. Errors return {"success": false, "error": "…"} with the HTTP status (see errors). A lookup that ran but found nothing (404) costs the price above; refused calls and errors on our side are free (what's charged).