christies APIchristies.com ↗
Access Christie's auction results, lot details, provenance, estimates, and private sales via API. 7 endpoints covering sold and upcoming lots.
What is the christies API?
The Christie's API provides 7 endpoints for retrieving auction data from christies.com, including sale results, individual lot details, and department listings. The get_lot_detail endpoint returns up to 10 fields per lot — artist, medium, dimensions, provenance, exhibition history, literature references, and multiple images — while search_lots lets you query sold and upcoming lots by keyword across Christie's full catalog.
curl -X GET 'https://api.parse.bot/scraper/e8837cb2-ff50-4fc7-a2af-52d73e7eda50/get_auction_results_overview?year=2025&month=2' \ -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 christies-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.
"""Walkthrough: Christie's Art Market SDK — browse auctions, search lots, drill into details."""
from parse_apis.christie_s_art_market_api import Christies, IsPast, LotNotFound
client = Christies()
# List auctions for a given month — single-page, no pagination needed.
for auction in client.auctions.list(year=2025, month=2, limit=3):
print(auction.title, auction.location, auction.sale_total)
# Search sold lots by keyword, take the top result and drill into details.
result = client.searchresults.search(query="Monet", is_past=IsPast.TRUE, limit=1).first()
if result:
print(result.artist_name, result.lot_title, result.price_realized)
# Navigate from auction → lots sub-resource → full lot detail.
auction = client.auctions.list(year=2025, month=3, limit=1).first()
if auction:
lot_summary = auction.lots.list(limit=1).first()
if lot_summary:
lot = lot_summary.details()
print(lot.artist_name, lot.medium, lot.dimensions, lot.estimate_currency)
# List departments — all collecting areas Christie's covers.
for dept in client.departments.list(limit=5):
print(dept.name, dept.url)
# Typed error handling around a lot detail fetch.
try:
bad_result = client.searchresults.search(query="xyznonexistent999", is_past=IsPast.FALSE, limit=1).first()
except LotNotFound as exc:
print(f"Not found: {exc}")
print("exercised: auctions.list / searchresults.search / auction.lots.list / lot_summary.details / departments.list")
Fetch auctions held in a specific month and year. Returns a list of auctions with metadata including title, date, location, sale total, and type. Covers both live and online-only sales that have closed in the given period.
| Param | Type | Description |
|---|---|---|
| year | integer | Year (e.g., 2025) |
| month | integer | Month (1-12) |
{
"type": "object",
"fields": {
"total": "integer count of auctions returned",
"auctions": "array of auction objects with keys: auction_id, sale_number, title, date, location, sale_total, type, url, status"
},
"sample": {
"data": {
"total": 16,
"auctions": [
{
"url": "https://onlineonly.christies.com/sso?SaleID=30939&SaleNumber=23978",
"date": "14 – 28 February",
"type": "Online",
"title": "First Open | Post-War & Contemporary Art",
"status": "Closed",
"location": "New York",
"auction_id": "30939",
"sale_total": "USD 2,022,552",
"sale_number": "23978"
}
]
},
"status": "success"
}
}About the christies API
Auction Results and Lot Browsing
The get_auction_results_overview endpoint accepts a year and month and returns a list of closed auctions for that period. Each auction object includes auction_id, sale_number, title, date, location, sale_total, and type, distinguishing between live and online-only sales. To drill into a specific auction, pass its landing page URL to get_auction_detail, which returns sale_id, is_online, description, and a header image_url. That sale_id feeds directly into get_auction_lots, which paginates up to 100 lots per page with estimate_low, estimate_high, and price_realized for each lot.
Lot-Level Detail and Search
get_lot_detail takes a lot page URL and returns the most granular data the API exposes: medium, dimensions, work_year, provenance, exhibited, literature, and an array of full-resolution images. These fields support art research, price comparisons, and catalog documentation workflows. search_lots accepts a free-text query and a boolean is_past flag to target either sold or upcoming lots, returning artist_name, lot_title, estimate, price_realized, and image_url per result — useful for building cross-artist price indices or screening upcoming sales.
Departments and Private Sales
get_departments requires no inputs and returns the full list of Christie's collecting areas — Impressionist Art, Jewellery, Watches, and similar — with each department's name and url. get_private_sales similarly returns available private sale categories as objects with id, primary_title, category_name, url, and image. These endpoints are stable reference lists that change infrequently and work well as lookup tables in applications that need to categorize or filter other results.
The christies API is a managed, monitored endpoint for christies.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when christies.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 christies.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 an auction price index by pulling
price_realizedfromget_auction_lotsacross multiple sales and months. - Research provenance and exhibition history for due-diligence workflows using
provenanceandexhibitedfromget_lot_detail. - Track upcoming lots for a specific artist by querying
search_lotswithis_past=falseand filtering byartist_name. - Aggregate monthly sale totals from
get_auction_results_overviewto chart Christie's revenue trends by location. - Populate an art advisory platform with lot images and estimates pulled from
get_auction_lotsandget_lot_detail. - Catalog private sale inventory by department using
get_private_salesandget_departmentsas reference lookups. - Compare pre-sale estimates against realized prices by joining
estimate_low/estimate_highwithprice_realizedfrom lot results.
| 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 Christie's have an official public developer API?+
What does get_lot_detail return beyond basic price data?+
get_lot_detail returns medium, dimensions, work_year, provenance, exhibited, literature, and an images array alongside the lot title and number. The provenance, exhibited, and literature fields are returned as raw text strings when present, or null when not recorded for that lot.Can I retrieve bidder information or buyer's premiums for a sale?+
How does pagination work in get_auction_lots and search_lots?+
get_auction_lots accepts a page parameter starting at 1 and returns up to 100 lots per page, along with a total count so you can compute the number of pages needed. search_lots also accepts a page parameter and returns a total count. Neither endpoint supports a configurable page size — the per-page limit is fixed.Does the API cover Christie's sales from years prior to 2020?+
get_auction_results_overview endpoint accepts any year and month inputs, but coverage of historical sales depends on what Christie's indexes on its results pages. Older sales may return incomplete metadata or fewer lots. For very early sales, sale_total and some lot-level fields such as price_realized may be null. You can fork this API on Parse and revise it to target archival sections of the site if your use case requires deeper historical coverage.