Documentation
Swagger UI altfndata.com

ALT/FNDATA Data API

Access 1M+ luxury auction records across watches, handbags, jewelry, gems, collector cars, motorcycles, aircraft, and wine & whisky from 100+ auction houses worldwide — including Christie's, Sotheby's, Phillips, Bonhams, RM Sotheby's, Barrett-Jackson, and more.

Base URL

https://api.altfndata.com

Recommended path for new developers

Follow these steps to go from zero to a working integration.

1

Get your API key

Your key is provided in your welcome email. Set it in the X-API-Key header for all requests.

Go to Authentication →
2

Make your first API call

Use the POST query endpoint to search across any of the eight datasets with filters and sorting — watches, handbags, jewelry, gems, automobile, motorcycle, aircraft, or wine_whisky.

Go to Querying Data →
3

Explore the datasets

Browse available tables, understand the columns, and discover what data you can query.

See Available Tables →

Build with the API

Available datasets

Access is granted per API key — your key may authorize a subset of these tables.


Tools & Integrations


Authentication #

All endpoints except /v1/health require an API key. Pass your key in the X-API-Key header:

Header
X-API-Key: afi_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Your API key is provided in your welcome email. Keep it secret — do not commit it to source control or share it publicly.

ScenarioHTTP StatusResponse
Key missing401{"detail": "Missing API key"}
Key invalid or inactive403{"detail": "Invalid API key"}
Key lacks table access403{"detail": "No access to table: watches"}

Endpoints #

The API exposes five endpoints. Replace {name} with one of watches, handbags, jewelry, gems, automobile, motorcycle, aircraft, or wine_whisky. Availability depends on which tables your API key authorizes.

MethodPathAuthDescription
GET/v1/healthNoService health check
GET/v1/tablesYesList available tables
GET/v1/tables/{name}/schemaYesGet column names & types
GET/v1/tables/{name}/queryYesSimple query via URL params
POST/v1/tables/{name}/queryYesAdvanced query with filters, sorting, pagination

GET /v1/health

GET/v1/health
bash
curl https://api.altfndata.com/v1/health
json
{
  "status": "healthy",
  "version": "1.0.0",
  "timestamp": "2026-03-04T13:00:00.000000+00:00",
  "athena_database": "altfinancedb"
}

GET /v1/tables

GET/v1/tables
bash
curl -H "X-API-Key: YOUR_KEY" https://api.altfndata.com/v1/tables
json
{
  "tables": [
    {"name": "watches",     "description": "Luxury watch auction results",         "column_count": 122},
    {"name": "handbags",    "description": "Luxury handbag auction results",       "column_count": 67},
    {"name": "jewelry",     "description": "Jewelry and gemstone auction results", "column_count": 99},
    {"name": "gems",        "description": "Gemstone auction results",             "column_count": 75},
    {"name": "automobile",  "description": "Collector car auction results",        "column_count": 66},
    {"name": "motorcycle",  "description": "Collector motorcycle auction results", "column_count": 66},
    {"name": "aircraft",    "description": "Aircraft auction results",             "column_count": 84},
    {"name": "wine_whisky", "description": "Wine and whisky auction results",      "column_count": 74}
  ]
}

Only tables authorized for your key appear in the response.

GET /v1/tables/{name}/schema

GET/v1/tables/{name}/schema
bash
curl -H "X-API-Key: YOUR_KEY" https://api.altfndata.com/v1/tables/watches/schema
json
{
  "table": "watches",
  "columns": [
    {"name": "item_title", "type": "string"},
    {"name": "designer", "type": "string"},
    {"name": "usd_price_decimal", "type": "double"},
    {"name": "sale_date", "type": "string"}
  ]
}

Querying Data #

POST /v1/tables/{name}/query (recommended)

POST/v1/tables/{name}/query

Full control over field selection, filters, sorting, and pagination.

Request body

json
{
  "fields": ["item_title", "designer", "usd_price_decimal", "sale_date", "vendor"],
  "filters": [
    {"field": "designer", "op": "eq", "value": "Rolex"},
    {"field": "usd_price_decimal", "op": "gte", "value": 50000}
  ],
  "sort": [
    {"field": "usd_price_decimal", "direction": "desc"}
  ],
  "limit": 20,
  "offset": 0
}
FieldTypeDefaultDescription
fieldsstring[] | nullnull (all columns)Columns to return
filtersFilterItem[] | nullnull (no filter)WHERE conditions (AND-ed together)
sortSortItem[] | nullnull (no ordering)ORDER BY clauses
limitint (1–1000)100Max rows to return
offsetint (≥ 0)0Rows to skip (pagination)

FilterItem

json
{"field": "column_name", "op": "eq", "value": "some_value"}

SortItem

json
{"field": "column_name", "direction": "desc"}

Response

json
{
  "table": "watches",
  "query_execution_id": "ae3d3e58-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "execution_time_ms": 1505,
  "result_count": 5,
  "limit": 20,
  "offset": 0,
  "fields": ["item_title", "designer", "usd_price_decimal", "sale_date", "vendor"],
  "data": [
    {
      "item_title": "Ref.6239, Cosmograph Daytona \"Paul Newman\"",
      "designer": "Rolex",
      "usd_price_decimal": 17752500.0,
      "sale_date": "-",
      "vendor": "Phillips"
    }
  ]
}

GET /v1/tables/{name}/query (simplified)

GET/v1/tables/{name}/query

For simple queries, use URL parameters:

bash
curl -H "X-API-Key: YOUR_KEY" \
  "https://api.altfndata.com/v1/tables/watches/query?designer=Rolex&limit=5&sort=usd_price_decimal:desc"
ParameterDescription
fieldsComma-separated column names: fields=item_title,vendor,usd_price_decimal
sortColumn and direction: sort=usd_price_decimal:desc
limitMax rows (default 100, max 1000)
offsetSkip N rows
Any column nameEquality filter: designer=Rolex becomes WHERE designer = 'Rolex'

Pagination

Use limit and offset to page through results:

text
Page 1: limit=100&offset=0
Page 2: limit=100&offset=100
Page 3: limit=100&offset=200

When result_count < limit, you've reached the last page.

Filter Operators #

All filters use the "op" key. Multiple filters are AND-ed together.

OperatorDescriptionValue TypeExample
eqEqualsscalar{"field": "designer", "op": "eq", "value": "Rolex"}
neqNot equalsscalar{"field": "status", "op": "neq", "value": "withdrawn"}
gtGreater thannumeric{"field": "usd_price_decimal", "op": "gt", "value": 100000}
gteGreater or equalnumeric{"field": "carats", "op": "gte", "value": 5}
ltLess thannumeric{"field": "usd_price_decimal", "op": "lt", "value": 1000}
lteLess or equalnumeric{"field": "usd_price_decimal", "op": "lte", "value": 1000}
likeContains (case-insensitive)string{"field": "item_title", "op": "like", "value": "Daytona"}
inIn listarray{"field": "vendor", "op": "in", "value": ["Christie's", "Sotheby's"]}
not_inNot in listarray{"field": "vendor", "op": "not_in", "value": ["eBay"]}
is_nullIs NULLnone{"field": "usd_price_decimal", "op": "is_null"}
is_not_nullIs not NULLnone{"field": "usd_price_decimal", "op": "is_not_null"}

Values for numeric operators (gt, gte, lt, lte) are auto-cast to double.

Available Tables #

Eight datasets are available. Use the /v1/tables/{name}/schema endpoint to see all columns for any table. Access is granted per API key — your key may authorize a subset.

watches

122 columns · 390K+ records

Luxury watch auction results from major houses worldwide.

handbags

67 columns · 120K+ records

Designer handbag auction results.

jewelry

99 columns · 480K+ records

Jewelry and gemstone auction results.

gems

75 columns

Loose gemstone auction results.

automobile

66 columns

Collector car auction results.

motorcycle

66 columns

Collector motorcycle auction results.

aircraft

84 columns

Aircraft listings with airframe and engine specs.

wine_whisky

74 columns

Wine and whisky auction results.

watches

ColumnTypeDescription
item_titlestringWatch description from the auction listing
designerstringBrand name (Rolex, Patek Philippe, Omega, etc.)
manufacturer_namestringManufacturer (often same as designer)
modelstringModel name (Submariner, Nautilus, etc.)
vendorstringAuction house (Phillips, Sotheby's, Christie's, etc.)
sale_pricedoubleHammer price in original sale currency
sale_currencystringOriginal currency (USD, GBP, EUR, CHF, etc.)
usd_price_decimaldoublePrice converted to USD
sale_datestringAuction date (YYYY-MM-DD)
sale_locationstringAuction city
sale_location_countrystringCountry
statusstringLot status (sold, unsold, withdrawn, etc.)
sale_estimates_low_usd_pricedoubleLow estimate in USD
sale_estimates_high_usd_pricedoubleHigh estimate in USD
case_materialstringCase material (steel, gold, platinum, etc.)
case_diameterstringCase diameter
dial_colorstringDial color
movementstringMovement type
referencestringReference number
item_imagestringPrimary image URL
lot_urlstringOriginal auction lot URL

handbags

ColumnTypeDescription
item_titlestringHandbag description from listing
brand_name_cleanstringStandardized brand name (Hermes, Chanel, Louis Vuitton, etc.)
designerstringDesigner name
modelstringModel name (Birkin, Kelly, Classic Flap, etc.)
vendorstringAuction house
sale_pricedoubleHammer price in original currency
sale_currencystringOriginal currency
usd_price_decimaldoublePrice converted to USD
sale_datestringAuction date
sale_locationstringAuction city
sale_location_countrystringCountry
statusstringLot status
sale_estimates_low_usd_pricedoubleLow estimate in USD
sale_estimates_high_usd_pricedoubleHigh estimate in USD
materialsstringBag materials
item_typestringBag type (Shoulder Bag, Clutch, Tote, etc.)
item_imagestringPrimary image URL
lot_urlstringOriginal lot URL

jewelry

ColumnTypeDescription
item_titlestringJewelry description from listing
designerstringDesigner or brand name
manufacturer_namestringManufacturer
vendorstringAuction house
sale_pricedoubleHammer price in original currency
sale_currencystringOriginal currency
usd_price_decimaldoublePrice converted to USD
sale_datestringAuction date
sale_locationstringAuction city
sale_location_countrystringCountry
statusstringLot status
sale_estimates_low_usd_pricedoubleLow estimate in USD
sale_estimates_high_usd_pricedoubleHigh estimate in USD
gem_typestringGemstone type (Diamond, Ruby, Sapphire, Emerald, etc.)
primary_gemstringPrimary gemstone
caratsdoubleCarat weight
gemstone_cutstringCut type
gemstone_claritystringClarity grade
colorstringGemstone color
item_typestringJewelry type (Ring, Necklace, Bracelet, etc.)
item_imagestringPrimary image URL
lot_urlstringOriginal lot URL

gems

ColumnTypeDescription
item_titlestringGemstone description from listing
vendorstringAuction house
sale_pricedoubleHammer price in original currency
sale_currencystringOriginal currency
usd_price_decimaldoublePrice converted to USD
sale_datestringAuction date
sale_locationstringAuction city
sale_location_countrystringCountry
statusstringLot status
sale_estimates_low_usd_pricedoubleLow estimate in USD
sale_estimates_high_usd_pricedoubleHigh estimate in USD
gem_typestringGemstone type (Diamond, Ruby, Sapphire, Emerald, etc.)
caratsdoubleCarat weight
colorstringGemstone color
gemstone_cutstringCut type
gemstone_claritystringClarity grade
originstringCountry / region of origin
certificationstringCertification lab (GIA, SSEF, Gübelin, etc.)
item_imagestringPrimary image URL
lot_urlstringOriginal lot URL

automobile

ColumnTypeDescription
item_titlestringLot title from the auction listing
manufacturer_namestringCanonical manufacturer (Ferrari, Porsche, Mercedes-Benz, etc.)
brand_namestringRaw brand name as listed
modelstringModel name (911, Daytona, F40, etc.)
production_yearstringModel year
vendorstringAuction house (Barrett-Jackson, RM Sotheby's, Bonhams Cars, etc.)
sale_pricedoubleHammer price in original sale currency
currencystringOriginal currency
usd_price_decimaldoublePrice converted to USD
sale_datestringAuction date (YYYY-MM-DD)
sale_locationstringAuction city
sale_location_countrystringCountry
sale_location_statestringState (US sales)
statusstringLot status (Sold, Unsold, Withdrawn, etc.)
sale_estimates_low_usd_pricestringLow estimate in USD
sale_estimates_high_usd_pricestringHigh estimate in USD
company_namestringManufacturer parent company
company_countrystringCountry of the manufacturer
item_typestringLot type (Car, Automobilia, etc.)
item_type_geministringGemini-classified item type
lot_urlstringOriginal auction lot URL
item_imagestringPrimary image URL

motorcycle

ColumnTypeDescription
item_titlestringLot title
manufacturer_namestringCanonical manufacturer (Harley-Davidson, Ducati, BMW, etc.)
brand_namestringRaw brand name
modelstringModel name
production_yearstringModel year
vendorstringAuction house
sale_pricedoubleHammer price in original currency
currencystringOriginal currency
usd_price_decimaldoublePrice converted to USD
sale_datestringAuction date
sale_locationstringAuction city
sale_location_countrystringCountry
statusstringLot status
company_namestringManufacturer parent company
item_typestringLot type
lot_urlstringOriginal lot URL
item_imagestringPrimary image URL

aircraft

ColumnTypeDescription
item_titlestringListing title
manufacturer_namestringManufacturer (Gulfstream, Bombardier, Cessna, etc.)
modelstringModel name (G650, Global 7500, Citation X, etc.)
production_yearbigintYear of manufacture
vendorstringListing source / broker
sale_pricedoubleAsking or sale price in original currency
sale_currencystringOriginal currency
sale_datestringListing or sale date
sale_locationstringListing location
sale_countrystringCountry
statusstringListing status
sale_estimates_lowdoubleLow estimate
sale_estimates_highdoubleHigh estimate
engine_manufacturerstringEngine maker
engine_modelstringEngine model
range_nmstringRange in nautical miles
max_cruise_speed_knotsstringMax cruise speed (knots)
max_takeoff_weight_lbsstringMax takeoff weight (lbs)
typical_passengersstringTypical passenger count
cabin_height_feetstringCabin height (ft)
cabin_length_feetstringCabin length (ft)
cabin_width_feetstringCabin width (ft)
total_time_hoursstringAirframe total time (hours)
serial_nostringSerial number
sale_urlstringOriginal listing URL
item_imagestringPrimary image URL

wine_whisky

ColumnTypeDescription
item_titlestringLot title
producerstringCanonical producer name
wine_producerstringProducer as originally listed
alcohol_typestringCategory (Wine, Whisky, Spirits, etc.)
colorstringWine color (Red, White, Rosé) where applicable
production_yearstringVintage / production year
vendorstringAuction house
sale_pricestringHammer price in original currency
currencystringOriginal currency
usd_price_decimaldoublePrice converted to USD
sale_datestringAuction date
sale_locationstringAuction city
sale_location_countrystringCountry
statusstringLot status
sale_estimates_low_usd_pricedoubleLow estimate in USD
sale_estimates_high_usd_pricedoubleHigh estimate in USD
item_typestringLot type
lot_urlstringOriginal lot URL
item_imagestringPrimary image URL

Rate Limits #

Usage limits vary by subscription tier. All quotas reset at midnight UTC.

LimitStarterProfessionalEnterprise
Requests per minute103060
Rows per day1,0005,00050,000+
Rows per month10,000100,000Negotiated
Max rows per request100250500
Bulk exportContract-governed

Your current limits are returned in every API response via headers:

http
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 28
X-RowQuota-Day-Limit: 5000
X-RowQuota-Day-Remaining: 4750
X-RowQuota-Month-Limit: 100000
X-RowQuota-Month-Remaining: 95250

When limits are exceeded, you receive HTTP 429:

json
{"detail": "Rate limit exceeded (30 requests/minute). Try again later."}
json
{"detail": "Daily row quota exceeded (5000 rows/day). Resets at midnight UTC."}
json
{"detail": "Monthly row quota exceeded (100000 rows/month). Resets on the 1st."}

Error Handling #

StatusCauseExample Response
400Invalid column, operator, or value{"detail": "Unknown column: invalid_col"}
401Missing API key{"detail": "Missing API key"}
403Invalid key or unauthorized table{"detail": "Invalid API key"}
404Table not found{"detail": "Table not found: yachts"}
429Rate limit or quota exceeded{"detail": "Rate limit exceeded..."}
500Athena query failure{"detail": "Athena query failed: ..."}

All error responses return JSON with a "detail" key. For 500 errors, a "query_execution_id" is also included for debugging.

Code Examples #

curl

bash
# List tables
curl -H "X-API-Key: YOUR_KEY" https://api.altfndata.com/v1/tables

# Simple GET query
curl -H "X-API-Key: YOUR_KEY" \
  "https://api.altfndata.com/v1/tables/watches/query?designer=Rolex&limit=10&sort=usd_price_decimal:desc"

# POST query with filters
curl -X POST https://api.altfndata.com/v1/tables/watches/query \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "fields": ["item_title", "designer", "vendor", "usd_price_decimal", "sale_date"],
    "filters": [
      {"field": "designer", "op": "eq", "value": "Rolex"},
      {"field": "usd_price_decimal", "op": "gte", "value": 50000}
    ],
    "sort": [{"field": "usd_price_decimal", "direction": "desc"}],
    "limit": 20
  }'

Python

python
import requests

API_KEY = "YOUR_KEY"
BASE = "https://api.altfndata.com"
HEADERS = {"X-API-Key": API_KEY}


# List tables
tables = requests.get(f"{BASE}/v1/tables", headers=HEADERS).json()
for t in tables["tables"]:
    print(f"{t['name']}: {t['column_count']} columns")


# Get schema
schema = requests.get(f"{BASE}/v1/tables/watches/schema", headers=HEADERS).json()
for col in schema["columns"][:10]:
    print(f"  {col['name']}: {col['type']}")


# Query: Top 10 Rolex watches by price
resp = requests.post(
    f"{BASE}/v1/tables/watches/query",
    headers={**HEADERS, "Content-Type": "application/json"},
    json={
        "fields": ["item_title", "vendor", "usd_price_decimal", "sale_date"],
        "filters": [
            {"field": "designer", "op": "eq", "value": "Rolex"},
            {"field": "usd_price_decimal", "op": "is_not_null"},
        ],
        "sort": [{"field": "usd_price_decimal", "direction": "desc"}],
        "limit": 10,
    },
)
data = resp.json()
print(f"\n{data['result_count']} results ({data['execution_time_ms']}ms)\n")
for row in data["data"]:
    print(f"  ${row['usd_price_decimal']:,.0f}  {row['vendor']}  {row['item_title'][:60]}")


# Pagination
all_results = []
offset = 0
while True:
    resp = requests.post(
        f"{BASE}/v1/tables/watches/query",
        headers={**HEADERS, "Content-Type": "application/json"},
        json={
            "fields": ["item_title", "usd_price_decimal"],
            "filters": [{"field": "designer", "op": "eq", "value": "Patek Philippe"}],
            "sort": [{"field": "usd_price_decimal", "direction": "desc"}],
            "limit": 100,
            "offset": offset,
        },
    )
    page = resp.json()
    all_results.extend(page["data"])
    if page["result_count"] < 100:
        break
    offset += 100

print(f"Total Patek Philippe records: {len(all_results)}")

JavaScript / Node.js

javascript
const API_KEY = "YOUR_KEY";
const BASE = "https://api.altfndata.com";

// List tables
const tables = await fetch(`${BASE}/v1/tables`, {
  headers: { "X-API-Key": API_KEY },
}).then((r) => r.json());

console.log(tables);

// Query watches
const resp = await fetch(`${BASE}/v1/tables/watches/query`, {
  method: "POST",
  headers: {
    "X-API-Key": API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    fields: ["item_title", "designer", "usd_price_decimal", "vendor"],
    filters: [
      { field: "designer", op: "eq", value: "Omega" },
      { field: "usd_price_decimal", op: "gte", value: 10000 },
    ],
    sort: [{ field: "usd_price_decimal", direction: "desc" }],
    limit: 10,
  }),
}).then((r) => r.json());

console.log(`${resp.result_count} results (${resp.execution_time_ms}ms)`);
resp.data.forEach((row) => {
  console.log(`  $${row.usd_price_decimal}  ${row.item_title}`);
});

Claude MCP Server #

The ALT/FNDATA MCP server lets Claude query the API directly in conversation. Instead of writing code, just ask questions in natural language.

Install

bash
pip install altfinance-mcp

Requires Python 3.10+.

Configure for Claude Desktop

Edit your Claude Desktop config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
json
{
  "mcpServers": {
    "altfinance": {
      "command": "altfinance-mcp",
      "env": {
        "ALTFINANCE_API_KEY": "YOUR_KEY"
      }
    }
  }
}

Restart Claude Desktop after saving.

Configure for Claude Code

bash
export ALTFINANCE_API_KEY="YOUR_KEY"
claude mcp add altfinance -- altfinance-mcp

MCP Tools

The server exposes 9 read-only tools. Every tool is annotated readOnlyHint and openWorldHint, and no tool modifies data.

ToolParametersReturns
list_tables()noneThe 15 tables with live descriptions and column counts
get_table_schema(table)tableColumn names and types for one table
query_table(table, fields, filters, sort_field, sort_direction, limit, offset)table required; filters use field/op/value; limit max 500Matching rows with filtering, sorting, field selection, and pagination
market_stats(table, filters, sold_only)table required; optional filters; sold_only defaults trueCount of sales, median, 25th/75th percentiles, average, min/max USD, sale-date span, and top vendors by volume, computed server-side over the full matching set
price_trend(table, filters, by, sold_only)by is year (default), quarter, or monthPer-period count, median, and average realized price
price_check(description, lot_url, category)Give a description or a lot_url; category is handbags, watches, or cars (inferred if omitted)Fair-value range (low / median / high), a confidence read, and comparable sales with source links, for one item. Loose stones and jewelry are intentionally held from comp-matching
search(query, category, filters, limit)query keywords; optional category hint; limit max 100Whole-market keyword search across every category at once, merged by realized price. With no category it fans out across all 15 tables
market_index(query, brand, category)A model query or a brand; category is handbags, watches, or carsPrecomputed model-level index (low / 25th / median / 75th / high), sample size, and trend. Other categories are redirected to market_stats or price_trend
list_alerts(limit)limit defaults 25Read-only view of fired price alerts when reachable, otherwise guidance on enabling alerts in the app. See Limits and caveats

Datasets and fields

The database spans 15 tables. Call list_tables for the live set with current column counts.

TableDescription
watchesLuxury watch auction results
handbagsLuxury handbag auction results
jewelryFinished jewelry, mounted pieces (rings, necklaces, bracelets, earrings) set with gemstones
gemsLoose, unmounted gemstones (single stones and parcels). Use this for gemstone valuations, not jewelry
automobileCollector car auction results
motorcycleCollector motorcycle auction results
aircraftAircraft auction results
wine_whiskyWine and whisky auction results
works_of_artWorks of art with stone/jewelry relevance (jade, jadeite, diamond-set, etc.)
fine_artFine art auction results across all movements and periods
designDesign and decorative arts: furniture, lighting, glass, ceramics, studio/industrial design
fashionFashion and couture: clothing and accessories (not handbags or shoes)
shoesFootwear: designer shoes and collectible sneakers
automobiliaAutomotive memorabilia, parts, signage, models and related collectibles (not the cars themselves)
booksBooks, manuscripts, maps and printed material

gems vs jewelry: gems holds LOOSE, unmounted stones (the right table for a gemstone valuation); jewelry holds FINISHED, mounted pieces set with stones. If one returns nothing, try the other.

Limits and caveats

  • Price alerts are read-only over MCP. Alerts and the watchlist belong to a signed-in ALT/FNDATA account (Cognito login), not to an API key. The MCP authenticates with an API key only, so it cannot create or enable alerts, and even reading requires the alerts feed to be reachable, otherwise list_alerts returns setup guidance rather than a feed. Manage alerts in the app at app.altfndata.com. Allowance by plan: free 0, registered 1, collector 10, pro 100, included with Membership.
  • Occasional suggestions. Some tool responses may append a single short "💡" line suggesting a complementary product or a plan upgrade. It appears at most once per response, only at a genuine tier boundary (a table your plan does not include, or an exhausted row quota) or as a relevant feature tip, and never for unlimited or comp accounts. It never changes the data returned.
  • Percentiles and medians in market_stats and price_trend depend on the API percentile update (already deployed). The 9 tools themselves depend on the MCP redeploy. This page describes the intended live state.
  • Read-only. Every tool is annotated readOnlyHint; the MCP never writes.

Example Prompts

Once configured, ask Claude:

  • "What tables are available in the ALT/FNDATA database?"
  • "Give me market stats for Rolex Daytona watches"
  • "How have Hermes Birkin prices moved by year?"
  • "Price-check a Rolex Daytona 116500 white dial"
  • "Search the whole market for a Burma ruby ring over $50k"
  • "What loose sapphires have sold at auction?" (this uses gems, not jewelry)

Claude will automatically call the right tools, handle schemas, and format results.

Environment Variables

VariableRequiredDefault
ALTFINANCE_API_KEYYes
ALTFINANCE_API_URLNohttps://api.altfndata.com