Sync the full inventory
/cars streams every active car in your sources, with full reports, through a server-side cursor. Use it to keep a local copy; use /search only for user-facing queries.
- Start a passRequest
/carswithoutscroll_id. Set filters such asdomains[]oris_leasingonly here. - Follow
next_urlexactlyKeep the same key and filters for the whole pass. Changingdomains[]oris_leasingmid-scroll returns422. - Fetch before the cursor expires
scroll_timeis 1–15 minutes (default 10), counted from the last request. On403/404with "scroll id was expired", start a new pass. - Finish, then archiveThe pass ends when
scroll_idis null anddatais empty. Only then mark cars you didn't see as sold.
Run a full pass 2–3 times a day. Archived cars leave /search and /cars right away, but stay reachable through /cars/{car_id} and /listing/{domain_id}/{listing_id} with archived: true for about a month.
Filter by vehicle type and configuration
vehicle_type=automobile / 1 is the default; motorcycle / 2 selects motorcycles on /search, /search/count and /cars. Use the same type for dictionaries.
For /cars the type and whole hierarchy are fixed for the scroll. Follow next_url unchanged or continue with scroll_id alone. Reordering equivalent filters is allowed; changing filters or supplying them when cached state is unavailable returns 422. Start a new scroll. Old scrolls without new parameters keep their original query.
url="https://api.auctionsapi.com/cars?limit=500&api_key=$CARS_API_KEY"
while [ -n "$url" ]; do
page=$(curl -sfg "$url" -H "Accept: application/json") || { echo "cursor expired, restart"; exit 1; }
echo "$page" | jq -c '.data[]' >> cars.ndjson
url=$(echo "$page" | jq -r '.next_url // empty')
done{
"scroll_id": null,
"data": [],
"total": 3217391,
"message": "No more data"
}Get API access
Connect your key to run every request on these pages against your own data. No key yet? Ask us for a demo key: the same JSON as the paid plans.