Connect key
GET/carsExport

Export vehicles with a cursor

Stream every active car in your sources, with full reports, through a server-side cursor. Built for keeping a local copy in sync.

  • vehicle_type=automobile / 1 is the default; motorcycle / 2 selects motorcycles on /search, /search/count and /cars. Use the same type for dictionaries.
  • Full hierarchy: brands[] → models[] → generations[] → variants[] / trims[]. Every brand/model/generation object needs id. OR between siblings and within each variant/trim list; AND between constraints in one branch. Missing or empty children mean any descendant. Each array accepts up to 100 entries. Unknown or mismatched IDs return no matches; malformed values return 422.
  • 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.
  • is_auction accepts true/false/1/0. False includes false, null and missing flags; omit for no filter. It must match the same active listing as is_leasing in the enabled/selected domains. Other listings may remain in listings[].
  • Set is_auction on the first request; next_url and scroll_id retain it, including false. Adding or changing it mid-scroll returns 422; an explicit value also returns 422 if cached state is lost or the session predates the filter.
  • Start without scroll_id, then request each next_url unchanged until scroll_id is null. See the sync guide.
  • limit is 1–500 (default 500). scroll_time is 1–15 minutes (default 10).
  • Keep domains[], is_leasing and is_auction the same for the whole pass. Changing them returns 422.
  • total can be null if its cache entry was lost.

Query parameters

16
limitinteger1–500 · default 500

Items per batch. Default 500; maximum 500. Positive values are required for a usable export.

scroll_timeinteger1–15 · default 10

Cursor lifetime in minutes. Default 10, maximum 15.

scroll_idstring

Opaque cursor from the preceding response. Prefer following next_url.

domains[]integer[]≥ 1

Optional source scope. Use IDs returned by GET /domains. Omit to use all enabled domains. Repeat the bracketed parameter: domains[]=33&domains[]=34. Every ID must be enabled for this key.

is_leasingboolean

Optional leasing filter. Send true (or 1) for listings explicitly marked is_leasing=true. Send false (or 0) to exclude true, including stored false, null and missing fields. Omit for no leasing filter; empty or invalid values return 422. A car must have at least one matching active listing in the enabled/selected domain scope. Other listings can remain in the response, so cars with mixed listing types can match both values. For /cars, set this on the first request and follow next_url unchanged; false is preserved. Continuing with only scroll_id retains the filter. Changing or adding the filter mid-scroll returns 422. If cached filter state is lost or the scroll predates this parameter, an explicit value returns 422; start a new scroll.

is_auctionboolean

Optional auction filter. Send true (or 1) for listings explicitly marked is_auction=true. Send false (or 0) to exclude true, including stored false, null and missing fields. Omit for no auction filter; empty or invalid values return 422. Combined is_auction and is_leasing must match the same listing. A car must have at least one matching active listing in the enabled/selected domain scope. Other listings can remain in the response, so cars with mixed listing types can match both values. For /cars, set this on the first request and follow next_url unchanged; false is preserved. Continuing with only scroll_id retains the filter. Changing or adding the filter mid-scroll returns 422. If cached filter state is lost or the scroll predates this parameter, an explicit value returns 422; start a new scroll.

vehicle_typestringdefault automobile

vehicle_type=automobile / 1 is the default; motorcycle / 2 selects motorcycles on /search, /search/count and /cars. Use the same type for dictionaries.

interior_colors[]integer[]≤ 100 items

Interior color IDs from the colors dictionary. OR within the list; missing values do not match. Applies to /search, /search/count and /cars. Keep unchanged during scroll.

cylinders[]integer[]1–99 · ≤ 99 items

Exact cylinder counts (1–99), OR within the list; unknown counts do not match. Applies to /search, /search/count and /cars. Keep unchanged during scroll.

brands[0][id]integer≥ 1

Full hierarchy: brands[] → models[] → generations[] → variants[] / trims[]. Every brand/model/generation object needs id. OR between siblings and within each variant/trim list; AND between constraints in one branch. Missing or empty children mean any descendant. Each array accepts up to 100 entries. Unknown or mismatched IDs return no matches; malformed values return 422.

brands[0][models][]integer[]≥ 1 · ≤ 100 items

Legacy brands[0][models][]=573 still works. For descendants use brands[0][models][0][id]=573. Clear the legacy append field before adding structured models for that brand, or PHP will overwrite index 0.

brands[0][models][0][id]integer≥ 1

Full hierarchy: brands[] → models[] → generations[] → variants[] / trims[]. Every brand/model/generation object needs id. OR between siblings and within each variant/trim list; AND between constraints in one branch. Missing or empty children mean any descendant. Each array accepts up to 100 entries. Unknown or mismatched IDs return no matches; malformed values return 422.

brands[0][models][0][generations][0][id]integer≥ 1

Full hierarchy: brands[] → models[] → generations[] → variants[] / trims[]. Every brand/model/generation object needs id. OR between siblings and within each variant/trim list; AND between constraints in one branch. Missing or empty children mean any descendant. Each array accepts up to 100 entries. Unknown or mismatched IDs return no matches; malformed values return 422.

brands[0][models][0][generations][0][variants][]integer[]≥ 1 · ≤ 100 items

Full hierarchy: brands[] → models[] → generations[] → variants[] / trims[]. Every brand/model/generation object needs id. OR between siblings and within each variant/trim list; AND between constraints in one branch. Missing or empty children mean any descendant. Each array accepts up to 100 entries. Unknown or mismatched IDs return no matches; malformed values return 422.

brands[0][models][0][generations][0][trims][]integer[]≥ 1 · ≤ 100 items

Full hierarchy: brands[] → models[] → generations[] → variants[] / trims[]. Every brand/model/generation object needs id. OR between siblings and within each variant/trim list; AND between constraints in one branch. Missing or empty children mean any descendant. Each array accepts up to 100 entries. Unknown or mismatched IDs return no matches; malformed values return 422.

langstring

Response locale. Option translations are also limited by the account languages. The page selects its current language automatically.

Custom listing fields

Load /listing-fields after checking the key. Definitions, constraints, operators and domain notes apply only to that key and selected domains.

Strings: eq, in, exists. Numbers and dates also support gt, gte, lt, lte. Booleans: eq or exists. Use either eq, in, exists or a range; exists is standalone. Up to 20 fields and 100 values per in.

All custom conditions, selected domains and activity must match the same listing. Zero and false are real values. Arrays match a qualifying element. Unknown or unavailable fields/operators return 422.

Only filterable fields can be queried. Indexed values are in listings[].custom_fields; stored-only values remain in listings[].source_data. Publication enables filters; subsequent normal imports fill values. Old documents are not backfilled.

For /cars, keep conditions for the whole scroll. An incompatible field contract or lost filter state requires a new scroll. Sorting and aggregations by these fields are not supported.

Use FIELD_KEY from your authorized catalogue in these examples. For money comparisons, also provide the native listing currency; this does not use Buy Now conversion.

Source-specific historical market estimates are informational stored-only values. They describe comparable sales, not this listing’s asking price, bid or reserve. Check the field description, comparison criteria and observation date; do not infer a currency from the listing. Registered numeric values can be null when no estimate is available.

custom_fields[FIELD_KEY][gte]=2
custom_fields[FIELD_KEY][in][]=a&custom_fields[FIELD_KEY][in][]=b
custom_fields[FIELD_KEY][eq]=false
custom_fields[FIELD_KEY][lte]=15000&custom_fields[FIELD_KEY][currency]=cad

Custom listing fields

Connect a key to see the fields available to your domains.

Returns · A batch of full Car objects in data, with next_url, scroll_id and total. The last page has scroll_id: null, empty data and message: "No more data".
GET/cars
curl -g "https://api.auctionsapi.com/cars?limit=5&api_key=$CARS_API_KEY" \
  -H "Accept: application/json"
ExamplesRecorded
{4 keys
"data": [1 item
0: {20 keys
"id": "290nw54Bkl-iPxZqEe_N"
"has_inspections": false
"has_history_reports": false
"year": 2007
"vin": "kmhdu46d27u158653"
"brand": {2 keys}
"model": {2 keys}
"engine_volume": 2000
"cylinders": 4
"body_type": {2 keys}
"fuel": {2 keys}
"color": {2 keys}
"power_hp": 138
"market_origin": {2 keys}
"drive_wheels": {2 keys}
"option_ids": []
"listings": [1 item]
"inspections": []
"vehicle_history_reports": []
"hash": "473326c69c007f50506c0cffdf30b08cf28e978d9ff2d5e7dca0dc75a54a3f6c"
}
]
"next_url": "https://api.carstat.dev/cars?scroll_id=FGluY2x1ZGVfY29udGV4dF91…&lang=en&api_key=YOUR_API_KEY&limit=2"
"scroll_id": "FGluY2x1ZGVfY29udGV4dF91…"
"total": 3217391
}

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.

I have a key