Skip to main content

JLR US — Discovery Explore Summary

  • OEM / market: jlr / us (Land Rover + Jaguar)
  • Explored / verified: 2026-06-12 (live probes); updated 2026-07-28

Entities and endpoints

EntityEndpointMethodAuth / protocolPaginationEnumerator
dealersretailerlocator.jaguarlandrover.com/dealersGETPublic; Origin/Referer per brandnone (single response)multi-zip sweep per brand, deduped by ciCode
modelsrules.config.landrover.com/rc/{brand_path}/en_us/{nameplate}_{my}/{ver}/.jsonpGETPublic JSONP (rcjson(...))nonevehicle-list → root_config per nameplate; models extracted from PRODUCT decomposition
featuresrules.config.landrover.com{product_query_href} (per-PRODUCT)GETPublic JSONPnoneone request per PRODUCT from root_config; non-structural categories extracted
inventoryproduction-api-oregon.search-api.netdirector.auto/api/vehicle-searchPOSTStatic authorization header + brand-specific uuid param; no WAFcurrentPage=1, pageSize=5000 per dealerper-dealer NetDirector query by locationManufacturerDealerNumber; condition="new" or condition="used"

Key findings

  • NetDirector inventory API adopted. inventory.landroverusa.com is backed by the NetDirector GraphQL API. The pipeline queries it once per dealer and condition, with dealer ciCode directly in the response.
  • Dual-brand coverage. Both Land Rover and Jaguar are fetched from all sources. Brand is derived from the configurator URL path (/lr/ → Land Rover, /jag/ → Jaguar), not from response properties.
  • Jaguar dealer code transformation. Retailerlocator returns Jaguar dealer codes with a leading 0 (e.g. 05806); NetDirector expects J-prefix (e.g. J5806). The transformation is applied at both dealer extraction and inventory fetch time.
  • No manufacturer filter. ~40% of Land Rover vehicles have null in the manufacturer field — filtering by manufacturer drops them silently. Use condition only.
  • Per-PRODUCT configurator fetching. Body-style configs are fetched per PRODUCT (not per MODEL or BODYSTYLE). Each PRODUCT is a fully specified vehicle: MODEL x ENGINE x BODYSTYLE x FUEL_TYPE. The PRODUCT's query[0].href provides the fetch URL.
  • SCS model enumerator is self-describing. No hardcoded version segments needed — the base nameplate URL 302-redirects to the current version.
  • CURATEDCHOICES excluded. The CURATEDCHOICES category is excluded from feature extraction alongside other structural categories (BODYSTYLE, MODEL, ENGINE, PRODUCT, CHARGES).

Candidate pagination params

  • inventory: currentPage=1, pageSize=5000 per dealer.

Fan-out enumerators

  • dealer: retailer-locator multi-zip sweep (per brand), dedupe by ciCode.
  • model/feature: vehicle-list → root_config (PRODUCT decomposition) → per-product body_style_config.

Fixtures (all real live captures)

  • packages/ai_public_api/tests/data/jlr/jlr_retailerlocator_sample.json — dealers (R0627 Land Rover Manhattan + neighbors)
  • packages/ai_public_api/tests/data/jlr/jlr_retailerlocator_live_sample.json — dealers (national sweep, 3 real)
  • packages/ai_public_api/tests/data/jlr/jlr_configurator_sample.json — models + features (LIVE l663_k26, Generated 2026-05-26)
  • packages/ai_public_api/tests/data/jlr/jlr_netdirector_sample.json — inventory (3 new vehicles, real VINs, from NetDirector national API)

Cross-source identity keys

  • inventory→dealers: location.manufacturerDealerNumber = dealer_code (with Jaguar 0→J transformation applied at both ends).
  • inventory→models: modelCode stored as manufacturer_model_code; joins to configurator manufacturer_model_code + model_year. ~44% of new-inventory records have null modelCode (stub allocations or unpopulated).
  • features→models: shared programme_code, model_year_code, product_id key.