[].kind | "deal_set" | "single" | Which kind of entry this is: deal_set or single. A client MUST skip an entry whose kind it does not know. |
[].dealSetId | string | Only when kind is "deal_set". |
[].href | string | Our website's path for this set. Display text: its words may change; do not branch on it. Only when kind is "deal_set". |
[].car | object | |
[].car.year | integer | integer, nullable | |
[].car.make | string | string, nullable | |
[].car.model | string | string, nullable | |
[].car.trim | string, nullable | When kind is "deal_set": A configuration value the posted configuration may hold without the buyer choosing it (a default, an auto-fill, a pasted link). Null for an AI assistant acting for the buyer. When kind is "single": A trim read from the listing, not from the buyer's own choice. Released to an AI assistant by the CEO's decision D37 (2026-10-08). |
[].car.exteriorColor | string, nullable | A configuration value the posted configuration may hold without the buyer choosing it (a default, an auto-fill, a pasted link). Null for an AI assistant acting for the buyer. Only when kind is "deal_set". |
[].car.interiorColor | string, nullable | A configuration value the posted configuration may hold without the buyer choosing it (a default, an auto-fill, a pasted link). Null for an AI assistant acting for the buyer. Only when kind is "deal_set". |
[].car.drivetrain | string, nullable | A configuration value the posted configuration may hold without the buyer choosing it (a default, an auto-fill, a pasted link). Null for an AI assistant acting for the buyer. Only when kind is "deal_set". |
[].car.powertrain | string, nullable | A configuration value the posted configuration may hold without the buyer choosing it (a default, an auto-fill, a pasted link). Null for an AI assistant acting for the buyer. Only when kind is "deal_set". |
[].buyerZip | string, nullable | The buyer's own search ZIP (the same value as the results' search.buyerZip), returned only to the buyer's own session. Null for an AI assistant acting for the buyer. Only when kind is "deal_set". |
[].dealerCount | integer, nullable | How many dealerships the search found for this set. Null for an AI assistant acting for the buyer (the count is third-party listing data). Counts of dealers who wrote back stay. Only when kind is "deal_set". |
[].summary | object | Only when kind is "deal_set". |
[].summary.written | integer | Only when kind is "deal_set". |
[].summary.waiting | integer | Only when kind is "deal_set". |
[].summary.differentCar | integer | Only when kind is "deal_set". |
[].summary.ended | integer | Only when kind is "deal_set". |
[].summary.endedWithPrice | integer | Only when kind is "deal_set". |
[].summary.closedWithPrice | integer | Only when kind is "deal_set". |
[].lowestWrittenOtdCents | integer, nullable | When kind is "deal_set": When kind is "single": The dealer's written out-the-door price in integer US cents, only when it is in writing; null otherwise. Same meaning as on a deal-set entry. |
[].lowestWrittenDistanceMiles | number, nullable | Distance from the buyer ZIP in miles (third-party listing data). It is the hero row's distance, so before that dealership is unlocked or chosen it is the LOWER BOUND of the distance band (0, 10, 25, 50 or 100), not the distance; after, the exact distance. Null for an AI assistant acting for the buyer. Only when kind is "deal_set". |
[].needsYou | integer | When kind is "deal_set": When kind is "single": 1 when the dealer asked the buyer something and is waiting, else 0. |
[].chosenLabels | array of string | The dealers the buyer has chosen, as labels. For a connected assistant (a delegated agent) each is a description of the car (colour, year, model, trim, miles to the nearest 100, listed price), never the dealership's name; the buyer's own session sees the name once she has chosen. Display text: its words may change, and two entries can read the same. Display text: its words may change; do not branch on it. Only when kind is "deal_set". |
[].section | "ready" | "in_progress" | "inactive" | Where the buyer's page places the request: ready = the dealership finished and sent an offer, in_progress = still active (it may already hold a written price), inactive = off the page. Whether a written price exists is lowestWrittenOtdCents (not null), whatever the section. |
[].memberIds | array of string | Only when kind is "deal_set". |
[].latestActivityAt | string, nullable | When kind is "deal_set": When kind is "single": The newest time this request changed (a time with a time zone), or null when none is known. |
[].changes | object (optional) | What changed on this request since since. Only on a since call, and only for an account that was granted it. |
[].changes.hasWrittenPrice | boolean | True when this request has a price in writing. A STATE, not an event: it does not say when the price became written, and it can be true on a request that was already written before since. |
[].changes.newReplies | one of | Dealership replies on this request after since: none, new (a count and a time) or could_not_check (the request could not be read just now; it is NOT the same as none). |
[].changes.newReplies.status | "none" | "new" | "could_not_check" | |
[].changes.newReplies.count | integer | How many dealership replies arrived after since. A number only: never what a reply said. |
[].changes.newReplies.latestAt | string | When the most recent of them arrived (a time with a time zone, our own receipt time). |
[].changes.ended | boolean | True when this request has ended. A STATE, not an event: it carries no time and does not mean it ended after since. |
[].id | string | This request's own id. It is a PRICE-CHECK id, not a deal-set id: GET /api/v1/deal-sets/{id} does not accept it. Only when kind is "single". |
[].dealerLabel | string, nullable | The dealership. For a connected assistant (a delegated agent) it is a description of the car (year, model, trim), never the dealership's name; for the buyer's own session it is the name, or null when the buyer has not seen it yet. Display text: its words may change. Display text: its words may change; do not branch on it. Only when kind is "single". |