Guides
Sync the full inventory
Two feeds keep a local catalog current: /cars for active inventory and /archived-lots for listings that are gone.
- 1
Build the initial catalog
Page through
/cars, usingsimple_paginate=1when totals are unnecessary. Store vehicle ID, source, lot identifiers and update timestamps. - 2
Collect updates
Poll
/cars?minutes=60 for a one-hour window, or pick a window that suits your polling interval (1–4320 minutes). Read every page with the same filters. - 3
Process archived listings
Poll
/archived-lots?minutes=60 over a matching window and mark that source lot inactive. One archived lot does not mean every listing of the vehicle is inactive. - 4
Apply changes idempotently
Upsert by identifiers. Use overlapping windows and stored timestamps to tolerate retries and duplicates.
- 5
Reconcile periodically
A rolling window is not a durable cursor. After a gap longer than 72 hours, rebuild active inventory instead of trusting the incremental feed.
Archive at lot level using lot_id. A vehicle can have other active lots. Older archive responses contain scalar bid/sale_date; newer responses use {value, updated_at}. Do not assume that a legacy bid is a confirmed final sale price.
A runnable server-side Python example: paginates both feeds, upserts vehicles and lots into SQLite, and archives only the affected lot. Uses a server environment key, timeouts, bounded retries and a last-success checkpoint. Install requests. Set AUCTIONS_API_KEY on the server, then run python sync_auction_cars.py --initial once; schedule subsequent runs without --initial. Default page sizes: cars=50, archive=100. Unlimited can set AUCTIONS_CARS_PER_PAGE=1000 and AUCTIONS_ARCHIVE_PER_PAGE=1000. Run one worker at a time (scheduler lock); adapt SQLite storage and reconcile gaps longer than 72 hours. This example does not make the moving feed a fixed snapshot.