---
title: "Compare two to four published listings"
method: POST
path: "/v1/vehicles/compare"
tags: ["Vehicles"]
---

# Compare two to four published listings

`POST /v1/vehicles/compare`

## Request

- Base URL: `https://api.carhandshake.com`
- URL: `https://api.carhandshake.com/v1/vehicles/compare`
- Auth: none required

## Request body

- object
  - `listing_ids` string[], required

## Response `200`

Visible listings in requested order

- VehicleListingDetail[]
  - `canonical_attributes` object
  - `canonical_features` object[]
    - `id` 'apple_carplay' | 'android_auto' | 'backup_camera' | 'blind_spot_warning' | 'forward_aeb' | 'rear_cross_traffic_warning' | 'heated_front_seats' | 'adaptive_cruise_control' | 'lane_keep_assist' | 'bluetooth_audio' | 'remote_start' | 'third_row_seating' | 'sunroof' | 'parking_sensors' | 'leather_seating' | 'ventilated_front_seats' | 'heated_steering_wheel' | 'proximity_keyless_entry' | 'push_button_start' | 'power_liftgate' | 'panoramic_glass_roof' | 'driver_seat_memory' | 'power_driver_seat' | 'power_passenger_seat' | 'built_in_navigation' | 'wireless_phone_charging' | 'premium_audio' | 'lane_departure_warning' | 'surround_view_camera' | 'automatic_high_beams' | 'automatic_climate_control' | 'led_headlights' | 'heated_rear_seats' | 'second_row_captains_chairs' | 'trailer_hitch' | 'towing_package' | 'trailer_brake_controller' | 'forward_collision_warning' | 'rear_aeb' | 'lane_centering_assist' | 'pedestrian_aeb' | 'blind_spot_camera' | 'head_up_display' | 'active_parking_assist' | 'power_sliding_doors' | 'synthetic_leather_seating' | 'dc_fast_charging' | 'heat_pump' | 'battery_preconditioning' | 'vehicle_to_load', required
    - `state` 'present', required
    - `qualifiers` object
      - `connection` 'wired' | 'wireless'
      - `position` 'front' | 'rear' | 'front_and_rear'
      - `stop_and_go` boolean
      - `hands_free` boolean
    - `qualifier_facts` object[]
      - `state` 'present' | 'absent' | 'unknown' | 'conflicted' | 'not_applicable', required
      - `qualifiers` object, required
        - `connection` 'wired' | 'wireless'
        - `position` 'front' | 'rear' | 'front_and_rear'
        - `stop_and_go` boolean
        - `hands_free` boolean
  - `feature_ids` string[]
  - `taxonomy_version` string
  - `normalizer_version` string
  - `quality` object
    - `version` 1, required
    - `price` object, required
      - `known` boolean, required
      - `review_reasons` string[], required
    - `photos` object, required
      - `usable_count` integer, required
    - `observation` object, required
      - `inventory_observed_at` string, date-time, nullable, required
      - `record_updated_at` string, date-time, nullable, required
      - `seller_confirmed_at` unknown, required
    - `identity` object, required
      - `status` 'resolved' | 'unconfirmed', required
    - `specifications` object, required
      - `conflicting_fields` string[], nullable, required
    - `physical_lot` object, required
      - `resolved` boolean, required
    - `homepage` object, required
      - `eligible` boolean, required
      - `reasons` string[], required
  - `listing_id` string, uuid, required
  - `vin` string, required
  - `stock` string, nullable, required
  - `year` integer, required
  - `make` string, required
  - `model` string, required
  - `trim` string, nullable, required
  - `vehicle_type` 'car' | 'motorcycle' | 'trailer' | 'rv' | 'other', required
  - `displacement_cc` number, nullable, required
  - `battery_kwh` number, nullable, required
  - `motor_power_hp` number, nullable, required
  - `dc_fast_charge` boolean, nullable, required
  - `charge_port` string, nullable, required
  - `condition` 'new' | 'used' | 'cpo' | 'null', nullable, required
  - `body` string, nullable, required
  - `fuel` string, nullable, required
  - `driveline` string, nullable, required
  - `transmission` string, nullable, required
  - `exterior_color` string, nullable, required
  - `interior_color` string, nullable, required
  - `price` integer, nullable, required: Current advertised amount in the listing currency (USD for US, CAD for CA), or null when omitted.
  - `msrp` integer, nullable, required: USD for US listings; CAD for Canadian listings.
  - `currency` 'USD' | 'CAD', required: Required to match location.country: USD for US and CAD for CA.
  - `mileage` integer, nullable, required: Miles for US listings; kilometres for Canadian listings.
  - `electric_range_miles` number, nullable, required: Miles for US listings; kilometres for Canadian listings. Wire name retained for compatibility.
  - `status` 'available' | 'intransit', required
  - `primary_photo_url` string, uri, nullable, required
  - `updated_at` string, date-time, required: Catalog record update time; not seller confirmation or inventory observation. Optional quality.observation distinguishes those facts.
  - `distance_miles` number, nullable, required: Miles for a US search or kilometres for a Canadian search; wire name retained for compatibility.
  - `dealer` PublicDealer, required
    - `id` string, uuid, required
    - `name` string, required
    - `domain` string, required
    - `agent_card_url` string, uri
    - `a2a_url` string, uri
  - `location` PublicLocation, required
    - `id` string, uuid, required
    - `name` string, required
    - `address_line_1` string, nullable, required
    - `address_line_2` string, nullable, required
    - `city` string, nullable, required
    - `state` string, nullable, required
    - `zip` string, nullable, required
    - `country` 'US' | 'CA', required
    - `latitude` number, nullable, required
    - `longitude` number, nullable, required
    - `geo_source` string, nullable, required
    - `geocode_precision` string, nullable, required
    - `geocode_confidence` number, nullable, required
    - `timezone` string, nullable, required
    - `website_url` string, uri, nullable, required
    - `public_phone` PublicPhone, required
      - `name` string, nullable, required
      - `value` string, required
    - `hours` BusinessHoursSchedule[], required
      - `name` string, required
      - `monday` BusinessHoursInterval
        - `open` string, required
        - `close` string, required
      - `tuesday` BusinessHoursInterval
        - `open` string, required
        - `close` string, required
      - `wednesday` BusinessHoursInterval
        - `open` string, required
        - `close` string, required
      - `thursday` BusinessHoursInterval
        - `open` string, required
        - `close` string, required
      - `friday` BusinessHoursInterval
        - `open` string, required
        - `close` string, required
      - `saturday` BusinessHoursInterval
        - `open` string, required
        - `close` string, required
      - `sunday` BusinessHoursInterval
        - `open` string, required
        - `close` string, required
    - `capabilities` string[], required
  - `canonical_url` string, uri, nullable, required: Canonical Car Handshake VDP URL when website publication is permitted.
  - `dealer_vdp_url` string, uri, nullable, required
  - `description` string, nullable, required
  - `engine` string, nullable, required
  - `city_mpg` integer, nullable, required
  - `highway_mpg` integer, nullable, required
  - `photos` string[], required
  - `features` string[], required

## Other responses

- `400`: RFC 9457 problem details

---

[API](https://skmtc.dev/carhandshake/apis/car-handshake-inventory-api.md) · [All operations](https://skmtc.dev/carhandshake/apis/car-handshake-inventory-api/llms.txt) · [OpenAPI document](https://skmtc.dev/carhandshake/apis/car-handshake-inventory-api/revisions/0a85bfd1c565?raw)
