Changed
optionsarrays on/v1/vins/{vin},/v1/listings/{listing_id}, and listing collections requested withinclude=optionsnow deduplicate entries that share a display name, keeping the entry that carries an MSRP when available.- VIN and listing detail responses temporarily omit interior or exterior color options when a vehicle’s catalog data contains more than one conflicting color of the same type; suppression will be retired once the upstream data remediation completes.
Compatibility
Non-breaking; no request changes required.options arrays may contain fewer, cleaner entries. Search filters and facet counts are unaffected.Added
/v1/listingsand dealer listing collections now supportpostal_codeandlisted_atinfields./v1/listings,/v1/dealers/{dealer_id}/listings, and/v1/facetsnow supportlisted_after=<ISO timestamp>to filter listings first observed by Visor on or after that time.- Listing collections now support
sort=listed_atandsort=-listed_at.
Compatibility
Non-breaking; existing requests continue to work without changes.Added
/v1/listingsand dealer listing collections now supportavailability_statusinfields, returningstock,transit,build, ornullwhen requested.- MCP listing guidance now presents
availability_statusas both filterable and selectable, matching common agent usage.
Compatibility
Non-breaking; existing requests continue to work without changes.Fixed
/v1/listings?dealer_id=...now validates dealer IDs before searching, so malformed values return400 validation_errorinstead of503 platform_error.
Added
/v1/facetsnow supportspowertrain_typeas a categorical facet for discovering available powertrain buckets within a listing cohort.
Compatibility
Non-breaking; existing requests continue to work without changes.Added
- Added nullable
pricingdetail to/v1/vins/{vin}underdata.latest_listing.pricingand to/v1/listings/{listing_id}underdata.pricingwhen supported provider pricing details are available. - The existing
pricefield is unchanged.pricing.line_itemsincludes customer-facing amount, label, role, applicability, direction, row key/order, and subtype fields only.
Compatibility
Non-breaking; no request changes required. Listings without pricing detail returnpricing: null.Changed
- Starter API Credit follows your Visor plan: Free 1, Plus monthly 50, Plus lifetime 1 is a baseline that never expires.
- The amount above the $1 baseline is a one-time paid-plan starter boost. Unused boost credit expires 12 months after it is granted — one rule for every plan. Credit you have already spent is never clawed back, and purchased API Credit never expires.
- The 12-month expiry also applies to starter credit granted before this change, measured from the original grant date.
Compatibility
Non-breaking for API requests; no client changes required. This changes promotional starter balance treatment only; purchased credit is unaffected.Added
- Added How the Data Works, covering listings, VINs, dealers, inventory modes, deduplication, sold inventory, advertised pricing semantics, null handling, and recommended workflows.
- Added Glossary, defining public fields, filters, response concepts, usage terms, and vehicle-market vocabulary.
- Clarified that sold inventory requires at least three days missing from the dealer inventory feed,
discount_from_msrpuses combined MSRP, andpriceis the dealer’s main advertised listing price.
Compatibility
Non-breaking; no request changes required.Added
- Added dedicated guides for authentication and scopes, filter and facet discovery, API errors and retries, and common copyable workflows.
- Added embedded request and successful response examples to each generated Public API reference operation.
- Reorganized the Guides navigation into Start, Core concepts, Workflows, and Updates sections.
Compatibility
Non-breaking; no request changes required.Changed
- MCP search results and public docs now call out the facet response envelope: categorical buckets are under
data.facets.<name>, numeric buckets underdata.range_facets.<name>, and stats underdata.stats.<name>. inventory_type,exclude_inventory_type,keywords,exclude_keywords, and listingdealer_typefilters now validate their supported tokens.inventory_type=cpois accepted as an alias forcertified.- Listing and facet filters now support
powertrain_type,exclude_inventory_type,exclude_body_type,exclude_transmission, andexclude_drivetrain. - Invalid VIN characters and malformed dealer IDs now return targeted
validation_errorresponses instead of being conflated with missing resources or transient data errors.
Compatibility
Non-breaking for valid requests. Requests that previously relied on unsupported closed-vocabulary values returning empty result sets should remove the typo or discover open categorical values with/v1/facets before filtering.Added
/v1/dealers?dealer_id=id1,id2now returns matching dealer profiles for up to 100 comma-separated dealer IDs.
Changed
- Public dealer, listing, facet, VIN, and listing-detail responses now consistently omit dealer sources that are not eligible for Public API exposure.
- MCP operation search now surfaces the dealer ID lookup filter for dealer profile batches.
- Deprecated
/v1/listings/searchcompatibility requests continue to execute and return migration headers.per_pagemaps tolimit, and one-basedpagemaps tooffset.
Compatibility
Non-breaking; no request changes required for dealer visibility filtering or dealer ID lookup. New code should use/v1/listings?limit=...&offset=...; existing /v1/listings/search callers should migrate before the sunset date in the response headers.Changed
- MCP
visor.usage.summary()now accepts an omitted query object. - Listing
fieldsvalidation errors now clarify thatfieldscontrols response projection and list the supported listing fields. - MCP listing guidance now calls out
response.datafor rows andresponse.pagination.totalfor collection totals.
Compatibility
Non-breaking; existing requests continue to work.Changed
- MCP
visor.vins.get(vin)andvisor.listings.get(listingId)now accept omitted options objects. - MCP search results and generated listing field docs now more clearly distinguish response
fieldsfrom filters such asavailability_status,options_packages, andfeatures.
Compatibility
Non-breaking; existing requests continue to work.Changed
- New self-serve Public API accounts receive one-time starter API Credit based on subscription plan: Free $1, Plus weekly $5, Plus monthly $10, Plus annual $50, and Plus lifetime $100.
Compatibility
Non-breaking. Starter credit is promotional and does not count as Eligible Paid Credit for automatic Usage Tier promotion.Changed
- Increased the MCP
executeworkflow ceiling from 10 to 50 underlying public API requests. - Added MCP-side pacing, bounded
429retries, andretry_after_secondsguidance when the client needs to wait.
Compatibility
Non-breaking. Underlying public API calls still count against normal rate limits, metering, and monthly spend controls.Changed
/v1/listingsand/v1/facetsnow useavailability_statusvalues:stock,transit, andbuild.- Removed public
in_transitfiltering. Useavailability_status=stockinstead ofin_transit=false, andavailability_status=transit,buildinstead ofin_transit=true.
Compatibility
Breaking. Update clients that sendin_transit.Added
- Released the hosted MCP server at
https://mcp.visor.vin/mcpwith OAuth and bearer-token authentication. - Added
searchandexecutetools for agent access to the Visor Public API.
Compatibility
Non-breaking. MCP calls map to the existing public/v1 API contract and record normal public API Usage Events.