Search listings
One row per LISTING — cross-listings included. A vehicle listed by several locations of one dealer group returns once per location, and total counts listings, not vehicles (856,200 listings describe 618,078 vehicles). This is deliberate and unchanged: deduplicate on vin if you want one row per vehicle, or use the MCP server's search_listings tool, which is deduplicated for you.
Paging: follow next_cursor until it is null. Offset paging is supported for shallow pages only.
Rate limits: every authenticated response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (seconds until the bucket refills), so you can self-throttle instead of discovering the ceiling as a 429.
Request
- Base URL: https://api.omniaauto.ca
- URL: https://api.omniaauto.ca/v1/listings
- Auth: HTTP bearer
Query parameters
Canadian standardized trim (from trim_canada); more reliable than raw trim for filtering.
Proximity anchor: a Canadian city ("Edmonton"), a postal code or FSA ("T5J 0N3", "T5J"), or explicit coordinates ("53.5461,-113.4938"). Use this for any distance question instead of guessing which towns surround a city — one call covers the whole circle. Pair with radius_km. Every result carries distance_km, and the response's geo block reports the anchor actually used and the share of the corpus that has dealer coordinates at all (~99.2%); listings without them cannot match a radius and are excluded.
Search radius in kilometres around near. Default 25, maximum 500 — past that use province=. Requires near.
Each column carries its own default direction, which order overrides: price and mileage return the LOWEST first, year/last_seen/first_seen the NEWEST first, distance the NEAREST first. distance requires near. CHANGED 2026-09-23: price and mileage previously defaulted to descending, which contradicted both this endpoint's documented cross-listing behaviour and the MCP tool's description. order was, and remains, authoritative whenever it is supplied.
Overrides the sort column's default direction. This parameter has never declared a default in this spec and still does not — the direction you get when you omit it is the one documented on sort.
Page size. Defaults to 25 when omitted, or your plan's max if that is lower. Plan maximums: Starter 10, Team 50, Growth 100; the MCP-only plans (Personal, Pro) return at most 10 listings per tool call. Pages larger than 25 records cost proportionally more (a 100-record page is 4 calls). Only row-level records count — an aggregate or a result count is not limited.
Row offset for shallow paging. Capped at 1000 — past that use cursor, which is faster and has no depth limit. Ignored when cursor is supplied.
Comma-separated enrichments: decode, valuation, recalls, payment. decode/valuation/recalls are billed per expanded row; payment is arithmetic on fields already in the row and is not billed separately. recalls is capped at the first 25 rows of a page, valuation likewise. payment requires a rate — pass apr or rate_source alongside.
Keyset pagination token. Pass the next_cursor from the previous response to get the next page. Pages at any depth in constant time and never skips or repeats a row when inventory changes mid-walk — unlike offset, which stops at 1000. Keep sort and order identical for the whole walk; a cursor replayed under a different sort is rejected. next_cursor is null on the last page.
Only listings first seen on or after this ISO date (YYYY-MM-DD). This is the delta-sync filter: poll it with your last sync date to pull just what is new.
Only listings first seen on or before this ISO date (YYYY-MM-DD).
Comma-separated subset of listing columns to return, e.g. fields=vin,price,Make,model. Case-insensitive. Trims the payload to what you actually read; decode/valuation expansion blocks are always kept. An unknown field returns 400 naming it.
Response
Matching listings + total count
Changes
No recorded changes to this operation across all 1 revision of this API.