WatchBase APIwatchbase.com ↗
Access WatchBase data via API: brands, collections, full watch specs, movement calibers, and images across thousands of references.
What is the WatchBase API?
The WatchBase API provides structured access to watch database data across 10 endpoints, covering brands, collections, individual references, and mechanical calibers. The get_watch_details endpoint returns case dimensions, dial specs, movement data, and production years for a specific reference. Alongside it, get_caliber_details exposes technical movement specifications including jewel count, frequency, power reserve, and a list of watches that use the caliber.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/4478feeb-1902-4307-96a0-7550387aa624/list_brands' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace watchbase-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.watchbase_api import WatchBase, Brand, BrandSummary, Collection, WatchSummary, CaliberBrand, CaliberSummary
watchbase = WatchBase()
# Search for watches across the entire database
for watch_summary in watchbase.brands.search_watches(query="daytona", limit=5):
print(watch_summary.reference, watch_summary.name, watch_summary.thumbnail_url)
# List all brands
for brand_summary in watchbase.brands.list(limit=3):
print(brand_summary.name, brand_summary.slug, brand_summary.watch_count)
# Fetch a full brand profile using constructible Brand
rolex = watchbase.brand("rolex")
# Navigate to collections sub-resource
for collection in rolex.collections.list(limit=3):
print(collection.name, collection.slug, collection.watch_count)
# List watches in a collection using constructible Collection
submariner = watchbase.collection("submariner")
for ws in submariner.watches.list(brand_slug="rolex", limit=2):
print(ws.reference, ws.name, ws.url)
# Get full watch details
watch = ws.details(brand_slug="rolex", collection_slug="submariner")
print(watch.name, watch.reference, watch.produced, watch.description)
if watch.case:
print(watch.case.material, watch.case.diameter, watch.case.water_resistance)
if watch.dial:
print(watch.dial.color, watch.dial.indexes)
# Get image URLs for this watch
for img_url in ws.images(brand_slug="rolex", collection_slug="submariner", limit=5):
print(img_url)
# List all caliber brands
for caliber_brand in watchbase.brands.list_all_calibers(limit=2):
print(caliber_brand.brand_name, caliber_brand.brand_slug)
for cal in caliber_brand.calibers:
print(cal.name, cal.slug)
# Get caliber details via brand sub-resource
for cal_summary in rolex.calibers.list(limit=2):
print(cal_summary.name, cal_summary.slug)
caliber = cal_summary.details(brand_slug="rolex")
print(caliber.reference, caliber.movement, caliber.jewels, caliber.reserve)
for wr in caliber.watches_using_caliber:
print(wr.reference, wr.url)
List all watch brands tracked by WatchBase. Returns brand name, URL slug, and watch count for each. Useful as the entry point for discovering brand slugs needed by other endpoints.
No input parameters required.
{
"type": "object",
"fields": {
"data": "object containing items array of brand objects with name, slug, and watch_count"
},
"sample": {
"data": {
"items": [
{
"name": "A. Lange & Söhne",
"slug": "a-lange-sohne",
"watch_count": 0
},
{
"name": "Rolex",
"slug": "rolex",
"watch_count": 0
}
]
},
"status": "success"
}
}About the WatchBase API
Brand and Collection Navigation
Start with list_brands to retrieve all tracked watch brands, each with a name, slug, and watch_count. Pass a brand_slug to get_brand to get the full brand profile — including description, website_url, and a collections array — or to list_collections_by_brand for a flat list of collection slugs and counts. From there, list_watches_by_collection accepts both brand_slug and collection_slug and returns watch summaries with reference, name, slug, thumbnail_url, and url.
Watch Detail and Image Data
get_watch_details requires brand_slug, collection_slug, and reference_slug and returns a structured object with nested case (dimensions, material, water resistance) and dial (color, indexes, hands) objects, plus movement, produced (production years), and free-text description. If you need every image associated with a reference, get_watch_images takes the same three parameters and returns an items array of image URL strings.
Caliber and Movement Data
list_all_calibers returns a single payload with every caliber brand, each containing a calibers array of name/slug pairs. Scope it to a single brand using list_calibers_by_brand. For full movement specs, get_caliber_details takes brand_slug and caliber_slug and returns diameter, jewels, reserve, frequency, movement type, and a watches_using_caliber array linking the movement to specific references.
Search
search_watches accepts a query string and an optional page integer. Results are paginated at 20 per page and include total_results, the current page, and a results array of watch summaries matching the same shape as collection listings.
The WatchBase API is a managed, monitored endpoint for watchbase.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when watchbase.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 watchbase.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?+
- Build a watch reference database app that maps brand slugs to full specs via get_watch_details
- Power a movement comparison tool using frequency, jewels, and power reserve from get_caliber_details
- Display brand pages with collection counts and official website links from get_brand
- Index all watch references for full-text search by iterating list_brands and list_watches_by_collection
- Populate a watch image gallery using the items array returned by get_watch_images
- Generate a caliber-to-watches reverse lookup using the watches_using_caliber field from get_caliber_details
- Build a cross-brand search feature using the paginated search_watches endpoint with query strings
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does WatchBase have an official developer API?+
What does get_watch_details return beyond basic reference info?+
case object with dimensions and material, a dial object with color and index details, movement type, produced (production year range), a text description, and image URLs — all in one response for the given brand_slug, collection_slug, and reference_slug combination.Does search_watches support filtering by brand, price range, or case material?+
query string and an optional page for pagination. It does not currently support field-level filters such as brand, material, or production year. You can fork this API on Parse and revise it to add a filtered-search endpoint targeting those parameters.Is retail pricing or market valuation data available for watch references?+
How does pagination work in search_watches, and what is the page size?+
page integer parameter (1-based) to walk through results. The response always includes a total_results integer so you can calculate the total number of pages without fetching all of them.