# description
Search available inventory across the network. Results are slim summary rows; embed hero_photo_url as a markdown image when presenting a vehicle, and call inventory_get with rooftop_slug for its full photo gallery. Optional OEM program scope; optional geographic radius — latitude, longitude, and radius_miles must appear together (all-or-none). Rooftops without coordinates are excluded from geo-scoped results.

# $defs.input.properties.rooftop_slug.description
Restrict results to one rooftop, as listed by network_directory. A slug that matches no rooftop returns no results rather than an error.

# $defs.input.properties.offset.description
Zero-based row offset. Results are totally ordered and stable for an unchanged catalog, but pagination is NOT snapshot-isolated: ingestion between two page requests shifts offsets, so a traversal may duplicate or omit rows. To copy the catalog consistently: record catalog_watermark AND total from the first page, compare both on every subsequent page, and restart the traversal if either changes. Narrowing by rooftop_slug shortens each traversal and so reduces the chance of a restart. Offsets beyond 10000 are rejected; narrow the query instead.

# $defs.output.properties.catalog_watermark.description
Opaque revision token for the network catalog. Changes whenever an inventory ingestion is applied anywhere in the network; monotonic per catalog but carries NO timestamp semantics — compare for equality only. Null before the first ingest. Covers ingestion only: administrative reconfiguration (rooftop activation, exclusion rules, coordinates) can shift result rows without changing this token — most such events also change total, which the traversal recipe compares as well.