L LiveArt Developers
LiveArt API · v1

The institutional data layer for the global art market.

Programmatic access to the world's largest structured auction dataset — 10M+ sale records across 1,400+ auction houses, with AI-powered price estimates, artist analytics, and live sale data. Built for collectors, advisors, financial institutions, and developers building the next generation of art-market tooling.

BASE URLhttps://api.liveart.ai
VERSIONv1
AUTHBearer token
FORMATJSON / OpenAPI 3.1

Quickstart

Make your first authenticated request in under a minute. The example below fetches the top 10 artists ranked by total auction sales.

# List the top 10 artists by total sales
curl "https://api.liveart.ai/v1/artists?limit=10&sort_by_total_sales=desc&is_top=true" \
  -H "Authorization: Bearer $LIVEART_API_KEY" \
  -H "Accept: application/json"

Response (truncated)

{
  "artists": [
    {
      "id": 142,
      "uid": "pablo-picasso",
      "name": "Pablo Picasso",
      "nationality": "Spanish",
      "birth": 1881,
      "death": 1973,
      "total_sales": 8214039715,
      "market_cap": 12480000000,
      "price_momentum_percentage_12mo": 7.4,
      "artworks_count": 36214
    }
  ],
  "total": 1287,
  "limit": 10,
  "offset": 0
}

Authentication

The LiveArt API uses HTTP bearer tokens. Pass your API key in the Authorization header on every request:

Authorization: Bearer la_live_xxxxxxxxxxxxxxxxxxxxxxxx

Keys are issued per organization and scoped to a plan tier (Starter / Growth / Enterprise). Treat your key like a password — never embed it in client-side code, mobile bundles, or public repositories.

Public-facing deployments Embedding the API in a public website, mobile app, or downstream API constitutes data redistribution and requires an Enterprise license. Internal-use Starter/Growth plans cannot be used to power public products. Contact api@liveart.ai to upgrade.

Public (unauthenticated) endpoints

Two endpoints are intentionally public so you can share data without exposing your key:

  • GET /v1/artworks/shared/{token} — view a shared artwork list
  • GET /v1/lots/shared/{token} — view a shared lot list

See Sharing & collaboration.

Base URL & versioning

All endpoints are served from a single base host. Versioning is in the URL path; we will introduce /v2 only for breaking changes and run both versions in parallel for at least 12 months.

https://api.liveart.ai/v1/<resource>

Additive, backwards-compatible changes (new optional query parameters, new fields in responses, new enum values) may be introduced at any time. Build your clients to ignore unknown fields.

Pagination

List endpoints are paginated using a classic limit / offset pattern.

ParameterTypeDefaultDescription
limitinteger20–100Number of items per page. Max varies by endpoint (typically 100; up to 1000 for /v1/artists).
offsetinteger0Number of items to skip from the start of the result set.

Responses include either a total (for resources where total count is known and cheap to compute) or has_more (for high-cardinality resources like /v1/lots). Use whichever the endpoint returns to drive your UI pager.

GET /v1/artworks?limit=50&offset=100   # page 3 of 50

Filtering operators

List endpoints support a rich, consistent filter grammar built from suffixes appended to field names. Combine as many as you need — they're AND'ed together.

SuffixMeaningExample
(none)Exact matchartist_id=142
__inMatch any of (repeat the param or comma-separate)artist_id__in=142&artist_id__in=87
__gteGreater than or equallast_hammer_price_usd__gte=100000
__lteLess than or equalcreation_year__lte=1970
__eqExplicit equality (used for enum-style fields like size)size__eq=big
__ilikeCase-insensitive substring matchname__ilike=evening sale

Worked example: blue-chip post-war works coming up at Sotheby's NY

curl "https://api.liveart.ai/v1/lots?\
status=upcoming&\
sale_auction_house_id=1&\
sale_location__in=New%20York&\
hammer_price_estimate_max_usd__gte=1000000&\
creation_year__gte=1945&creation_year__lte=1980&\
sort=HAMMER_PRICE_ESTIMATE_MAX_DESC&\
limit=50" \
  -H "Authorization: Bearer $LIVEART_API_KEY"

Sorting

Each list endpoint accepts a sort query parameter that takes one of an enumerated set of values. The convention is FIELD_DIRECTION:

  • ArtworksNAME_ASC, NAME_DESC, CREATION_YEAR_ASC, CREATION_YEAR_DESC, SALE_DATE_ASC, SALE_DATE_DESC, SIZE_ASC, SIZE_DESC
  • LotsNUMBER_ASC, NUMBER_DESC, SALE_DATE_ASC, SALE_DATE_DESC, CREATION_YEAR_ASC/DESC, HAMMER_PRICE_ESTIMATE_MIN_ASC/DESC, HAMMER_PRICE_ESTIMATE_MAX_ASC/DESC
  • SalesID_ASC/DESC, START_DATETIME_ASC/DESC, END_DATETIME_ASC/DESC, DATE_ASC/DESC
  • Artists — use sort_by_total_sales or sort_by_market_cap with values asc / desc

Currencies

All monetary fields are returned natively in the sale's source currency and normalized to USD. Pass preferred_currency on most list/detail endpoints to additionally receive values converted to a third currency of your choice using daily reference rates.

Supported values for preferred_currency:

USD · GBP · EUR · CHF · JPY · CNY · HKD · SGD · TWD · KRW · INR · AUD · CAD · NZD · NOK · RUB

The PriceSchema object on every priced resource contains parallel sets of fields:

Field familyMeaning
hammer / hammer_estimate_min / hammer_estimate_max / premiumNative sale currency (see currency)
*_usdNormalized to USD (always populated)
*_preferredConverted to the currency you passed in preferred_currency

Errors

The API uses standard HTTP status codes. Validation errors are returned with full FastAPI-style detail arrays so you can pinpoint the offending field.

StatusMeaning
200 OKSuccessful request
204 No ContentSuccessful follow / unfollow with no body
401 UnauthorizedMissing or invalid bearer token
403 ForbiddenToken valid but plan does not grant access to this resource
404 Not FoundResource does not exist (or is not accessible to you)
422 Unprocessable EntityValidation error — see detail[] for offending fields
5xxServer error — safe to retry with exponential backoff

Validation error example

{
  "detail": [
    {
      "loc": ["query", "limit"],
      "msg": "ensure this value is less than or equal to 100",
      "type": "value_error.number.not_le"
    }
  ]
}

Resource overview

The API exposes seven core resources. Every endpoint is documented below with its parameters, a real request, and a representative response.

Artists

Biographical and market data on the artists tracked by LiveArt — including total sales, market cap, 12-month price momentum, and a follow mechanism so you can build personalized feeds.

GET/v1/artists
GET/v1/artists/{artist_id}
GET/v1/artists/{artist_id}/chart
GET/v1/artists/{artist_id}/related
GET/v1/artists/followed
POST/v1/artists/{artist_id}/follow
DELETE/v1/artists/{artist_id}/follow

List artists

GET/v1/artists

Search and rank artists. Supports text search, top-artist filter, and ranking by total sales or market cap.

ParameterTypeDescription
limitinteger · ≤1000Page size. Default 100.
offsetinteger · ≥0Skip count.
qstringFree-text search across name and known synonyms.
sort_by_total_salesasc · descRank by lifetime auction sales (USD).
sort_by_market_capasc · descRank by LiveArt market cap estimate.
uid__instring[]Filter by canonical artist UID slugs (e.g. pablo-picasso).
id__ininteger[]Filter by numeric artist IDs.
is_topbooleanLimit to LiveArt's curated "top artist" set.

Get a single artist

GET/v1/artists/{artist_id}

Returns the full ArtistSchema, including long biography, nationality, life dates, market metrics, and the 64-dimensional artist_index_vector used by our recommendation engine.

{
  "id": 142,
  "uid": "jean-michel-basquiat",
  "name": "Jean-Michel Basquiat",
  "nationality": "American",
  "birth": 1960,
  "death": 1988,
  "bio": "American Neo-expressionist artist...",
  "total_sales": 3214000000,
  "market_cap": 5840000000,
  "max_price": 110487500,
  "price_momentum_percentage_12mo": 12.4,
  "artworks_count": 1842,
  "recent_lots_count": 37,
  "is_followed": true,
  "photo_thumbnail_url": "https://cdn.liveart.ai/..."
}

Artist price chart

GET/v1/artists/{artist_id}/chart

Time series for an artist's market: a TradingView-compatible ChartResponse with one or more series (typically the LiveArt Index plus optional confidence bands). Resolutions: daily, monthly, yearly.

{
  "resolution": "monthly",
  "unit": "index",
  "currency": "USD",
  "series": [
    {
      "id": "liveart_index",
      "label": "LiveArt Index",
      "data": [
        { "time": "2020-01-01", "value": 100.0 },
        { "time": "2020-02-01", "value": 102.4 },
        { "time": "2020-03-01", "value": 98.7 }
      ]
    }
  ]
}

Related artists

GET/v1/artists/{artist_id}/related

Returns artists whose market behavior, period, and stylistic fingerprint are most similar — derived from the proprietary artist_index_vector. Useful for "investors who tracked X also followed…" components.

Follow / unfollow

POST/v1/artists/{artist_id}/follow

Adds the artist to the authenticated user's follow list. Returns 204 No Content.

DELETE/v1/artists/{artist_id}/follow

Removes the artist from the follow list. Idempotent.

GET/v1/artists/followed

Paginated list of all artists the authenticated user follows.

Artworks

Each artwork is a unique, deduplicated work — distinct from the lots in which copies of it appear. The artwork object carries the LiveArt Estimate™ AI price prediction, 12- and 24-month momentum, and the full canonical description.

GET/v1/artworks
GET/v1/artworks/{artwork_id}/chart
GET/v1/artworks/{artwork_id}/similar
GET/v1/artworks/{artwork_id}/editions
POST/v1/artworks/share
GET/v1/artworks/shared/{token}

List artworks

The most powerful endpoint in the API. Filter on more than 50 dimensions across artist, physical attributes, market state, sale context, and price.

Selected query parameters

ParameterTypeDescription
artist_id · artist_id__ininteger · integer[]Restrict to one or more artists.
category_id · category_id__ininteger · integer[]Painting, sculpture, photography, etc. (see categories).
creation_year__gte / __lteintegerBound the year of creation.
size__insmall · medium · big · otherLiveArt's normalized size buckets.
measurements_*_cm__gte / __ltenumberNumeric bounds for height, width, depth (cm).
materials · materials__instring · string[]Filter by medium (oil on canvas, bronze, etc.).
last_lot_statusunknown · upcoming · withdrawn · sold · passedMost recent lot outcome for this artwork.
date_last_sold__gte / __ltedateBound by date of last completed sale.
date_last_upcoming__gte / __ltedateBound by upcoming sale date.
current_estimated_price__gte / __ltenumberBound by LiveArt Estimate™ value.
price_momentum_12mo__gte / __ltenumber12-month momentum percentile (-1.0 to 1.0).
last_hammer_price_usd__gte / __lteintegerMost recent hammer price in USD.
last_premium_price_usd__gte / __lteintegerMost recent premium-inclusive price (USD).
without_editionsbooleanExclude editioned multiples — show only unique works.
with_imagesbooleanRestrict to artworks with at least one image. Default false.
sale_auction_house_id__ininteger[]Restrict to upcoming sales at specific houses.
sale_start_datetime__gte / __ltedatetimeBound the upcoming sale window.
market_cap__gtenumberMinimum artist market cap (filter out micro-cap artists).
preferred_currencyenumConvert prices to one of 16 supported currencies.
sortArtworkSortEnumSee Sorting.
sort_by_priceasc · descConvenience sort by current estimated price.

Example: Basquiat works estimated $1M–$5M coming up in the next 90 days

curl "https://api.liveart.ai/v1/artworks?\
artist_id=142&\
last_lot_status=upcoming&\
current_estimated_price__gte=1000000&\
current_estimated_price__lte=5000000&\
date_last_upcoming__gte=2026-04-15&\
date_last_upcoming__lte=2026-07-15&\
sort=SALE_DATE_ASC&\
with_images=true" \
  -H "Authorization: Bearer $LIVEART_API_KEY"

Response shape

{
  "items": [
    {
      "id": 9012345,
      "uid": "jmb-untitled-1982-skull",
      "slug": "untitled-1982",
      "last_lot_status": "upcoming",
      "date_last_upcoming": "2026-05-14",
      "currency": "USD",
      "current_estimated_price": 3850000,
      "current_estimated_price_min": 3200000,
      "current_estimated_price_max": 4500000,
      "price_momentum_12mo": 0.124,
      "price_change_12mo": 421000,
      "description": { "name": "Untitled", "materials": "acrylic and oilstick on canvas", "creation_year": 1982 },
      "price": { "hammer_estimate_min_usd": 3200000, "hammer_estimate_max_usd": 4500000 }
    }
  ],
  "total_count": 7,
  "limit": 20,
  "offset": 0
}

Artwork price chart

GET/v1/artworks/{artwork_id}/chart

Returns a ChartResponse for the individual artwork — historical hammer prices for every prior sale of the work, plus a forward-looking confidence band derived from the LiveArt Estimate™ model. Confidence-band points include value_low and value_high.

Similar artworks

GET/v1/artworks/{artwork_id}/similar

Vector-similarity search across the catalog: returns artworks comparable in artist, period, medium, scale, and market segment. Optional preferred_currency for price normalization.

Editions

GET/v1/artworks/{artwork_id}/editions

For editioned works (prints, photographs, multiples), returns every edition LiveArt has tracked, with the full lot history of each. Useful for building edition-level price ladders.

Lots

A lot is a single offering at a single sale. Many lots can point at the same underlying artwork (re-sales, multiple editions). Lot endpoints share most filters with /v1/artworks but add lot-specific fields like hammer price, premium, lot number, and sale context.

GET/v1/lots
GET/v1/lots/followed
POST/v1/lots/{lot_id}/follow
DELETE/v1/lots/{lot_id}/follow
POST/v1/lots/share
GET/v1/lots/shared/{token}

List lots

ParameterTypeDescription
status · status__inunknown · upcoming · withdrawn · sold · passedLot lifecycle state.
sale_status · sale_status__inclosed · upcoming · live · session_offState of the parent sale.
auction_house_id · sale_auction_house_idintegerFilter by auction house at the lot or sale level.
sale_id · sale_id__ininteger · integer[]Restrict to specific sales.
sale_location · sale_location__instring · string[]Filter by sale location string (e.g. "New York", "London").
sale_datetime__gte / __ltedatetimeBound by sale time.
hammer_price_usd__gte / __lteintegerBound by realized hammer price (USD).
hammer_price_estimate_max_usd__gte / __lteintegerBound by high estimate (USD).
premium_price_usd__gte / __lteintegerBound by premium-inclusive price (USD).
artist_id · artist_uid · artwork_id · artwork_uidinteger · stringFilter by artist or artwork relations.
is_topbooleanCurated "headline" lots only.
searchstringFree-text across artist name, artwork title, and lot notes.
sortLotSortEnumSee Sorting.
preferred_currencyenumConvert all monetary fields.

Single lot response (excerpt)

{
  "id": 81472019,
  "lot_num": "24A",
  "status": "sold",
  "auction_house_id": 1,
  "auction_house_name": "Sotheby's",
  "sale_id": 90217,
  "is_top": true,
  "reserve_mark": true,
  "third_party_mark": false,
  "price": {
    "currency": "USD",
    "hammer": 3200000,
    "hammer_estimate_min": 2500000,
    "hammer_estimate_max": 3500000,
    "premium": 3920000,
    "hammer_usd": 3200000,
    "premium_usd": 3920000
  },
  "artwork": { "id": 9012345, "name": "Untitled", "creation_year": 1982 },
  "sale":    { "id": 90217, "name": "Contemporary Evening Auction", "location": "New York" }
}

Follow lots

POST/v1/lots/{lot_id}/follow

Track an upcoming lot. Combine with /v1/lots/followed to power a personalized watchlist.

DELETE/v1/lots/{lot_id}/follow

Remove a lot from the watchlist. Idempotent.

GET/v1/lots/followed

Same query grammar as /v1/lots, scoped to the user's followed lots.

Sales

A sale is an auction session — typically multiple lots offered together over a single day or evening. Sale objects carry aggregate totals (hammer total, premium total, sell-through ratios) once concluded.

GET/v1/sales
GET/v1/sales/followed
POST/v1/sales/{sale_id}/follow
DELETE/v1/sales/{sale_id}/follow

List sales

ParameterTypeDescription
auction_house_id · auction_house_id__ininteger · integer[]Filter by auction house.
name__ilikestringSubstring search on sale name.
status · status__inclosed · upcoming · live · session_offLifecycle state.
is_onlinebooleanFilter online-only or in-room sales.
is_bids_streamingbooleanSales whose live bid stream is wired into LiveArt's feed.
location · location__in · location_id · location_id__instring / integerFilter by city/region.
start_datetime__gte / __ltedatetimeBound the sale start.
end_datetime__gte / __ltedatetimeBound the sale end.
sortSaleSortEnumSee Sorting.
preferred_currencystringCurrency for the *_preferred aggregate fields.

Sale aggregate fields

Concluded sales include rich aggregate metrics — perfect for sale-recap dashboards and benchmarking:

  • cumulative_total, hammer_total, premium_sold_total — top-line totals (also _usd_zeroied and _preferred variants)
  • hammer_low_estimate, hammer_high_estimate — pre-sale estimate envelope
  • lots_count, lots_count_not_sold, lots_count_sold_above_estimations, _within_, _below_ — sell-through breakdown
  • is_bids_streaming — whether LiveArt has a live feed of incoming bids

Auction Houses

GET/v1/auction-houses

Returns the canonical list of auction houses LiveArt indexes. Use the integer id for filtering anywhere in the API. Optional name query parameter for substring search.

[
  { "id": 1, "name": "Sotheby's",    "slug": "sothebys",    "priority_order": 1, "is_live": true },
  { "id": 2, "name": "Christie's",   "slug": "christies",   "priority_order": 2, "is_live": true },
  { "id": 3, "name": "Phillips",     "slug": "phillips",    "priority_order": 3, "is_live": true }
]

Categories

GET/v1/categories

The canonical taxonomy used to classify every artwork. Use category id values with category_id__in on artwork and lot endpoints.

Sharing & collaboration

Two POST endpoints turn a private list of artworks or lots into a tokenized URL that can be viewed without authentication — ideal for sending an advisor's pre-sale recommendations to a collector.

POST/v1/artworks/share

Body: { "artwork_ids": [int], "currency": "USD" }. Returns { "token": "abc123…" }.

GET/v1/artworks/shared/{token}

Public — no auth required. Returns the same ArtworksResponse as /v1/artworks.

POST/v1/lots/share

Body: { "lot_ids": [int], "currency": "USD" }. Returns a token.

GET/v1/lots/shared/{token}

Public — no auth required.

Health check

GET/healthcheck

Public, unauthenticated endpoint that returns 200 OK when the API is reachable. Suitable for uptime monitors and deployment smoke tests.

Schemas

The API returns a small number of well-defined object types. The most important ones:

SchemaReturned byDescription
ArtistSchemaartist endpointsBiographical and market-level data on an artist.
ArtworkSchema/v1/artworks, /v1/artworks/{id}/similarUnique artwork with current estimate, momentum, and embedded DescriptionSchema + PriceSchema.
LotSchema/v1/lots, /v1/lots/followedA single auction-house offering with embedded artwork, sale, image, and price.
SaleSchema/v1/sales, /v1/sales/followedAn auction session with aggregate totals and sell-through breakdown.
PriceSchemaartworks, lotsNative + USD + preferred-currency price triples.
ChartResponseartist + artwork chart endpointsTradingView-compatible time-series with one or more ChartSeries.
CategorySchema · AuctionHouseSchemareference endpointsLookup tables.
EditionsResponse · EditionSchema/v1/artworks/{id}/editionsEdition ladder for multiples.

Field-level definitions for every schema are in the OpenAPI spec.

OpenAPI specification

The full machine-readable specification is published at:

https://api.liveart.ai/openapi.json

The spec is OpenAPI 3.1.0 and works out-of-the-box with code generators — Swagger Codegen, OpenAPI Generator, openapi-typescript, openapi-python-client, etc. We recommend regenerating clients on each release of your application.

Generate a typed Python client

pipx install openapi-python-client
openapi-python-client generate \
  --url https://api.liveart.ai/openapi.json \
  --meta poetry

Generate TypeScript types

npx openapi-typescript https://api.liveart.ai/openapi.json -o ./liveart.d.ts

Changelog

The API follows additive, backwards-compatible evolution within /v1. We publish a changelog with every release.

DateChange
2026-04-01Added preferred_currency to sale list endpoints.
2026-02-12Added price_momentum_24mo and price_change_24mo on ArtworkSchema.
2025-12-04Added /v1/artworks/{id}/editions.
2025-10-22Added bulk id__in / uid__in filters on artists, artworks, lots, and sales.
2025-09-01Initial public release of /v1.

Need help?

Email api@liveart.ai for support, enterprise pricing, or questions about embedding LiveArt data in production systems.