← Back to listings

RV Chooser Marketplace API

Unified search over used RVs listings with model-level specs, market comparison, de-duplication, anonymous personalization and buyer lead capture.

RV-readable spec: /api/openapi

Try it

Endpoints

get/api/inventory

Search listings (de-duplicated by default) with filters, sorting, pagination and facet counts

qstringFull-text search (make, model, category, location, description)
categorystringNormalized category; repeat or comma-separate
makestringMake; multi
modelstringNormalized model key; multi
statestringUS state code; multi
locationstringCity; multi
minPricenumberUSD
maxPricenumberUSD
yearinteger
minYearinteger
maxYearinteger
minHoursinteger
maxHoursinteger
hasPricestring1 = only priced listings
sortstring (relevance, price_asc, price_desc, year_desc, year_asc, hours_asc, hours_desc, newest)
pageinteger1-based
pageSizeinteger1-100 (default 24)
trackstring0 = don't record as a personalization signal

200 { total, page, pageSize, totalPages, items[], facets{category,make,model,state,location}, ranges }

default Error

get/api/inventory/{id}

One listing with model specs and price history

idstring

200 Listing

404 Not found

default Error

get/api/compare

Side-by-side comparison: specs, market median for comparable listings, deal score, similar listings

idsstringComma-separated listing ids (max 4)

200 { spec_keys[], items[{...listing, model_specs, market{n,median,p25,p75,med_hours,basis}, deal{score,label,price_vs_market_pct}, similar[]}] }

default Error

get/api/recommendations

Recommendations for the current visitor (uid cookie or X-User-Id header)

limitintegermax 24
similarTostringseed listing id

200 { strategy, profile, items[] with score & reasons }

default Error

post/api/leads

Submit a buyer request (availability, quote, financing, inspection) for a listing or in general

201 { ok, leadId }

400 validation error

default Error

get/api/market

Public market aggregates (index, or ?category=<slug> / ?model=<make-model slug>) with as_of date and attribution

categorystringCategory slug
modelstringModel slug

200 { type, as_of, stats{n,median,p25,p75,min,max,med_hours}, price_by_year[], hours_distribution[], ... }

404 { error{code,message,resolution} }

default Error

get/api/favorites

List favorites

200 { items[] }

default Error

post/api/favorites

Add/remove favorite

200 ok

default Error

post/api/events

Record an interaction signal

200 ok

default Error

Personalization, comparison and leads

A uid cookie is set on first visit (API clients may send X-User-Id). Views, favorites, searches, filters, comparisons and inquiries drive a content-based profile (category, make, model, price, year, mileage; 30-day decay). Cold start ranks by price vs. category median plus popularity. /api/compare returns reference model specs, the market median of comparable active listings (same model family ±2 years, else same category), a 0-100 deal score and similar listings. POST /api/leads records a buyer request (availability, quote, financing or inspection) that the RV Chooser team follows up on.