Skip to content
ridekickDevelopersv1 · 2026-10-13

Get a request

GET /api/v1/deal-sets/{id}

One request's ranked results.

FactValue
AvailabilityAvailable
CredentialThe buyer's signed-in website session; An AI assistant the buyer approved, sending the access token she gave it. It sees only what the buyer allowed it to see
Rate limitread: 120 per 60 s
Deadline8 s. Past it, the read is cancelled and nothing partial is sent.

Path parameters

NameTypeDescription
idstringThe request's id, its dealSetId (a uuid). Anything else is not_found.

Response

200 with { "data": … }. Money is integer US cents, in fields named …Cents.

FieldTypeDescription
dealSetIdstring
carobject
car.yearinteger
car.makestring
car.modelstring
car.trimstring, nullableA 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.
car.exteriorColorstring, nullableA 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.
car.interiorColorstring, nullableA 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.
car.drivetrainstring, nullableA 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.
car.powertrainstring, nullableA 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.
searchobject
search.buyerZipstring, nullableThe buyer's own search ZIP, returned only to the buyer's own session. Null for an AI assistant acting for the buyer.
search.radiusMilesnumber, nullableThe search radius in miles around the buyer's ZIP: 100 on the site, 250 when the buyer chose Search further out, or the value an API caller requested. Null for an AI assistant acting for the buyer, or when unknown.
countsobject
counts.writteninteger
counts.waitinginteger
counts.differentCarinteger
counts.endedinteger
counts.endedWithPriceinteger
counts.closedWithPriceinteger
counts.totalinteger, nullableHow 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.
counts.needsYouinteger
headerLinestring, nullableOne-line summary of the set, for display. Null for an AI assistant acting for the buyer: the line states how many dealers the set holds, which is third-party listing data. Display text: its words may change; do not branch on it.
heroobject, nullable
hero.rowKeystring
hero.labelstringDisplay label for the lowest written price's row. Display text: its words may change; do not branch on it.
hero.otdCentsinteger
hero.sellingPriceCentsinteger, nullable
hero.taxesAndFeesCentsinteger, nullable
hero.listedAtCentsinteger, nullableThe list price of the listing in integer cents (third-party listing data). It is the listed price, never an offer or a written price. Released to an AI assistant by the CEO's decision D37 (2026-10-08).
hero.writtenAtstring, nullable
hero.distanceMilesnumber, nullableDistance from the buyer ZIP in miles (third-party listing data). Before the dealership is unlocked this is the LOWER BOUND of the distance band (0, 10, 25, 50 or 100), not the distance: read distanceBand. Null for an AI assistant acting for the buyer.
hero.distanceBandstring, nullableThe distance band as words: Under 10 miles, 10 to 25 miles, 25 to 50 miles, 50 to 100 miles or Over 100 miles (third-party listing data). Always the band, never an exact distance. Null for an AI assistant acting for the buyer.
hero.trimstring, nullableA trim read from the listing, not from the buyer choice (third-party listing data). Released to an AI assistant by the CEO's decision D37 (2026-10-08).
hero.gapToNextCentsinteger, nullable
hero.canChoosebooleanTrue once this row may be chosen: it has been unlocked (the dealer is no longer hidden), not yet chosen, a written price for the same car, not archived. See the versioning changelog for how this field changed meaning.
hero.canUnlockbooleanTrue while the dealer is STILL hidden on this row: a written price for the same car, not archived. False once the row has been unlocked (or chosen). See the versioning changelog for how this field relates to canChoose.
hero.chosenboolean
rankedarray of object
ranked[].trimstring, nullableA trim read from the listing, not from the buyer choice (third-party listing data). Released to an AI assistant by the CEO's decision D37 (2026-10-08).
ranked[].rowsarray of object
ranked[].rows[].rowKeystring
ranked[].rows[].labelstringDisplay label for the row. A connected assistant (a delegated agent) ALWAYS gets a description of the car: colour, year, model, trim, miles to the nearest 100 and the listed price, a part we do not have left out, never the dealership's name. Two rows can read the same: refer to a row by rowKey. Its words may change; never branch on it. The buyer's own session sees the label her page shows and the dealership's name once she has unlocked or chosen it. Display text: its words may change; do not branch on it.
ranked[].rows[].hiddenboolean
ranked[].rows[].chosenboolean
ranked[].rows[].archivedboolean
ranked[].rows[].state"written" | "waiting" | "different_car" | "ended"
ranked[].rows[].ended"sold" | "closed_with_price" | "no_price" | "timed_out", nullable
ranked[].rows[].statusLabelstringThe row's status in words. Branch on state and ended, not on this. Display text: its words may change; do not branch on it.
ranked[].rows[].otdCentsinteger, nullable
ranked[].rows[].sellingPriceCentsinteger, nullable
ranked[].rows[].listedAtCentsinteger, nullableThe list price of the listing in integer cents (third-party listing data). It is the listed price, never an offer or a written price. Released to an AI assistant by the CEO's decision D37 (2026-10-08).
ranked[].rows[].writtenAtstring, nullable
ranked[].rows[].gapToLowestCentsinteger, nullable
ranked[].rows[].canChoosebooleanTrue once this row may be chosen: it has been unlocked (the dealer is no longer hidden), not yet chosen, a written price for the same car, not archived. See the versioning changelog for how this field changed meaning.
ranked[].rows[].canUnlockbooleanTrue while the dealer is STILL hidden on this row: a written price for the same car, not archived. False once the row has been unlocked (or chosen). See the versioning changelog for how this field relates to canChoose.
ranked[].rows[].quotedTrimstring, nullableA trim read from the listing, not from the buyer choice (third-party listing data). Released to an AI assistant by the CEO's decision D37 (2026-10-08).
ranked[].rows[].distanceMilesnumber, nullableDistance from the buyer ZIP in miles (third-party listing data). Before the dealership is unlocked this is the LOWER BOUND of the distance band (0, 10, 25, 50 or 100), not the distance: read distanceBand. Null for an AI assistant acting for the buyer.
ranked[].rows[].distanceBandstring, nullableThe distance band as words: Under 10 miles, 10 to 25 miles, 25 to 50 miles, 50 to 100 miles or Over 100 miles (third-party listing data). Always the band, never an exact distance. Null for an AI assistant acting for the buyer.
ranked[].rows[].priceCheckHrefstring, nullable
ranked[].rows[].isVerifiedPartnerbooleanTrue when this dealership is a Verified partner: it pays Ridekick a subscription and has agreed to honor its written price while the car is available, if the buyer qualifies for any rebates, incentives or financing in that price. Always present in answers to builders, and may be omitted from answers to hosted assistants; false means either that the dealership is not a partner or that its status is not shown for this row yet, so don't present false as "not a partner", and show the conditions above wherever you show true.
needsYouarray of question | draft
needsYou[].kind"question" | "draft"
needsYou[].rowKeystring
needsYou[].labelstringWhen kind is "question": Display label for the row the question is about. Display text: its words may change; do not branch on it. When kind is "draft": Display label for the row the draft is for. Display text: its words may change; do not branch on it.
needsYou[].promptIdstring, nullableOnly when kind is "question".
needsYou[].categorystringOnly when kind is "question".
needsYou[].headingstringShort heading for the question. Display text: its words may change; do not branch on it. Only when kind is "question".
needsYou[].questionstring, nullableThe dealer's question in words, or null. Null for an AI assistant acting for the buyer. Display text: its words may change; do not branch on it. Only when kind is "question".
needsYou[].answerModestringOnly when kind is "question".
needsYou[].otdCentsinteger, nullableOnly when kind is "question".
needsYou[].requestIdstringOnly when kind is "draft".
needsYou[].previewstring, nullableOpening of the reply waiting for the buyer, or null. Null for an AI assistant acting for the buyer. Display text: its words may change; do not branch on it. Only when kind is "draft".
needsYou[].previewCompleteboolean (optional)True only when preview is the whole reply. False when preview shows only part of it, or is null. Only when kind is "draft".
everyoneElseobject
everyoneElse.waitingarray of object
everyoneElse.waiting[].rowKeystring
everyoneElse.waiting[].labelstringDisplay label for the row. A connected assistant (a delegated agent) ALWAYS gets a description of the car: colour, year, model, trim, miles to the nearest 100 and the listed price, a part we do not have left out, never the dealership's name. Two rows can read the same: refer to a row by rowKey. Its words may change; never branch on it. The buyer's own session sees the label her page shows and the dealership's name once she has unlocked or chosen it. Display text: its words may change; do not branch on it.
everyoneElse.waiting[].hiddenboolean
everyoneElse.waiting[].chosenboolean
everyoneElse.waiting[].archivedboolean
everyoneElse.waiting[].state"written" | "waiting" | "different_car" | "ended"
everyoneElse.waiting[].ended"sold" | "closed_with_price" | "no_price" | "timed_out", nullable
everyoneElse.waiting[].statusLabelstringThe row's status in words. Branch on state and ended, not on this. Display text: its words may change; do not branch on it.
everyoneElse.waiting[].otdCentsinteger, nullable
everyoneElse.waiting[].sellingPriceCentsinteger, nullable
everyoneElse.waiting[].listedAtCentsinteger, nullableThe list price of the listing in integer cents (third-party listing data). It is the listed price, never an offer or a written price. Released to an AI assistant by the CEO's decision D37 (2026-10-08).
everyoneElse.waiting[].writtenAtstring, nullable
everyoneElse.waiting[].gapToLowestCentsinteger, nullable
everyoneElse.waiting[].canChoosebooleanTrue once this row may be chosen: it has been unlocked (the dealer is no longer hidden), not yet chosen, a written price for the same car, not archived. See the versioning changelog for how this field changed meaning.
everyoneElse.waiting[].canUnlockbooleanTrue while the dealer is STILL hidden on this row: a written price for the same car, not archived. False once the row has been unlocked (or chosen). See the versioning changelog for how this field relates to canChoose.
everyoneElse.waiting[].quotedTrimstring, nullableA trim read from the listing, not from the buyer choice (third-party listing data). Released to an AI assistant by the CEO's decision D37 (2026-10-08).
everyoneElse.waiting[].distanceMilesnumber, nullableDistance from the buyer ZIP in miles (third-party listing data). Before the dealership is unlocked this is the LOWER BOUND of the distance band (0, 10, 25, 50 or 100), not the distance: read distanceBand. Null for an AI assistant acting for the buyer.
everyoneElse.waiting[].distanceBandstring, nullableThe distance band as words: Under 10 miles, 10 to 25 miles, 25 to 50 miles, 50 to 100 miles or Over 100 miles (third-party listing data). Always the band, never an exact distance. Null for an AI assistant acting for the buyer.
everyoneElse.waiting[].priceCheckHrefstring, nullable
everyoneElse.waiting[].isVerifiedPartnerbooleanTrue when this dealership is a Verified partner: it pays Ridekick a subscription and has agreed to honor its written price while the car is available, if the buyer qualifies for any rebates, incentives or financing in that price. Always present in answers to builders, and may be omitted from answers to hosted assistants; false means either that the dealership is not a partner or that its status is not shown for this row yet, so don't present false as "not a partner", and show the conditions above wherever you show true.
everyoneElse.differentCararray of object
everyoneElse.differentCar[].rowKeystring
everyoneElse.differentCar[].labelstringDisplay label for the row. A connected assistant (a delegated agent) ALWAYS gets a description of the car: colour, year, model, trim, miles to the nearest 100 and the listed price, a part we do not have left out, never the dealership's name. Two rows can read the same: refer to a row by rowKey. Its words may change; never branch on it. The buyer's own session sees the label her page shows and the dealership's name once she has unlocked or chosen it. Display text: its words may change; do not branch on it.
everyoneElse.differentCar[].hiddenboolean
everyoneElse.differentCar[].chosenboolean
everyoneElse.differentCar[].archivedboolean
everyoneElse.differentCar[].state"written" | "waiting" | "different_car" | "ended"
everyoneElse.differentCar[].ended"sold" | "closed_with_price" | "no_price" | "timed_out", nullable
everyoneElse.differentCar[].statusLabelstringThe row's status in words. Branch on state and ended, not on this. Display text: its words may change; do not branch on it.
everyoneElse.differentCar[].otdCentsinteger, nullable
everyoneElse.differentCar[].sellingPriceCentsinteger, nullable
everyoneElse.differentCar[].listedAtCentsinteger, nullableThe list price of the listing in integer cents (third-party listing data). It is the listed price, never an offer or a written price. Released to an AI assistant by the CEO's decision D37 (2026-10-08).
everyoneElse.differentCar[].writtenAtstring, nullable
everyoneElse.differentCar[].gapToLowestCentsinteger, nullable
everyoneElse.differentCar[].canChoosebooleanTrue once this row may be chosen: it has been unlocked (the dealer is no longer hidden), not yet chosen, a written price for the same car, not archived. See the versioning changelog for how this field changed meaning.
everyoneElse.differentCar[].canUnlockbooleanTrue while the dealer is STILL hidden on this row: a written price for the same car, not archived. False once the row has been unlocked (or chosen). See the versioning changelog for how this field relates to canChoose.
everyoneElse.differentCar[].quotedTrimstring, nullableA trim read from the listing, not from the buyer choice (third-party listing data). Released to an AI assistant by the CEO's decision D37 (2026-10-08).
everyoneElse.differentCar[].distanceMilesnumber, nullableDistance from the buyer ZIP in miles (third-party listing data). Before the dealership is unlocked this is the LOWER BOUND of the distance band (0, 10, 25, 50 or 100), not the distance: read distanceBand. Null for an AI assistant acting for the buyer.
everyoneElse.differentCar[].distanceBandstring, nullableThe distance band as words: Under 10 miles, 10 to 25 miles, 25 to 50 miles, 50 to 100 miles or Over 100 miles (third-party listing data). Always the band, never an exact distance. Null for an AI assistant acting for the buyer.
everyoneElse.differentCar[].priceCheckHrefstring, nullable
everyoneElse.differentCar[].isVerifiedPartnerbooleanTrue when this dealership is a Verified partner: it pays Ridekick a subscription and has agreed to honor its written price while the car is available, if the buyer qualifies for any rebates, incentives or financing in that price. Always present in answers to builders, and may be omitted from answers to hosted assistants; false means either that the dealership is not a partner or that its status is not shown for this row yet, so don't present false as "not a partner", and show the conditions above wherever you show true.
everyoneElse.endedarray of object
everyoneElse.ended[].rowKeystring
everyoneElse.ended[].labelstringDisplay label for the row. A connected assistant (a delegated agent) ALWAYS gets a description of the car: colour, year, model, trim, miles to the nearest 100 and the listed price, a part we do not have left out, never the dealership's name. Two rows can read the same: refer to a row by rowKey. Its words may change; never branch on it. The buyer's own session sees the label her page shows and the dealership's name once she has unlocked or chosen it. Display text: its words may change; do not branch on it.
everyoneElse.ended[].hiddenboolean
everyoneElse.ended[].chosenboolean
everyoneElse.ended[].archivedboolean
everyoneElse.ended[].state"written" | "waiting" | "different_car" | "ended"
everyoneElse.ended[].ended"sold" | "closed_with_price" | "no_price" | "timed_out", nullable
everyoneElse.ended[].statusLabelstringThe row's status in words. Branch on state and ended, not on this. Display text: its words may change; do not branch on it.
everyoneElse.ended[].otdCentsinteger, nullable
everyoneElse.ended[].sellingPriceCentsinteger, nullable
everyoneElse.ended[].listedAtCentsinteger, nullableThe list price of the listing in integer cents (third-party listing data). It is the listed price, never an offer or a written price. Released to an AI assistant by the CEO's decision D37 (2026-10-08).
everyoneElse.ended[].writtenAtstring, nullable
everyoneElse.ended[].gapToLowestCentsinteger, nullable
everyoneElse.ended[].canChoosebooleanTrue once this row may be chosen: it has been unlocked (the dealer is no longer hidden), not yet chosen, a written price for the same car, not archived. See the versioning changelog for how this field changed meaning.
everyoneElse.ended[].canUnlockbooleanTrue while the dealer is STILL hidden on this row: a written price for the same car, not archived. False once the row has been unlocked (or chosen). See the versioning changelog for how this field relates to canChoose.
everyoneElse.ended[].quotedTrimstring, nullableA trim read from the listing, not from the buyer choice (third-party listing data). Released to an AI assistant by the CEO's decision D37 (2026-10-08).
everyoneElse.ended[].distanceMilesnumber, nullableDistance from the buyer ZIP in miles (third-party listing data). Before the dealership is unlocked this is the LOWER BOUND of the distance band (0, 10, 25, 50 or 100), not the distance: read distanceBand. Null for an AI assistant acting for the buyer.
everyoneElse.ended[].distanceBandstring, nullableThe distance band as words: Under 10 miles, 10 to 25 miles, 25 to 50 miles, 50 to 100 miles or Over 100 miles (third-party listing data). Always the band, never an exact distance. Null for an AI assistant acting for the buyer.
everyoneElse.ended[].priceCheckHrefstring, nullable
everyoneElse.ended[].isVerifiedPartnerbooleanTrue when this dealership is a Verified partner: it pays Ridekick a subscription and has agreed to honor its written price while the car is available, if the buyer qualifies for any rebates, incentives or financing in that price. Always present in answers to builders, and may be omitted from answers to hosted assistants; false means either that the dealership is not a partner or that its status is not shown for this row yet, so don't present false as "not a partner", and show the conditions above wherever you show true.
everyoneElse.archivedarray of object
everyoneElse.archived[].rowKeystring
everyoneElse.archived[].labelstringDisplay label for the row. A connected assistant (a delegated agent) ALWAYS gets a description of the car: colour, year, model, trim, miles to the nearest 100 and the listed price, a part we do not have left out, never the dealership's name. Two rows can read the same: refer to a row by rowKey. Its words may change; never branch on it. The buyer's own session sees the label her page shows and the dealership's name once she has unlocked or chosen it. Display text: its words may change; do not branch on it.
everyoneElse.archived[].hiddenboolean
everyoneElse.archived[].chosenboolean
everyoneElse.archived[].archivedboolean
everyoneElse.archived[].state"written" | "waiting" | "different_car" | "ended"
everyoneElse.archived[].ended"sold" | "closed_with_price" | "no_price" | "timed_out", nullable
everyoneElse.archived[].statusLabelstringThe row's status in words. Branch on state and ended, not on this. Display text: its words may change; do not branch on it.
everyoneElse.archived[].otdCentsinteger, nullable
everyoneElse.archived[].sellingPriceCentsinteger, nullable
everyoneElse.archived[].listedAtCentsinteger, nullableThe list price of the listing in integer cents (third-party listing data). It is the listed price, never an offer or a written price. Released to an AI assistant by the CEO's decision D37 (2026-10-08).
everyoneElse.archived[].writtenAtstring, nullable
everyoneElse.archived[].gapToLowestCentsinteger, nullable
everyoneElse.archived[].canChoosebooleanTrue once this row may be chosen: it has been unlocked (the dealer is no longer hidden), not yet chosen, a written price for the same car, not archived. See the versioning changelog for how this field changed meaning.
everyoneElse.archived[].canUnlockbooleanTrue while the dealer is STILL hidden on this row: a written price for the same car, not archived. False once the row has been unlocked (or chosen). See the versioning changelog for how this field relates to canChoose.
everyoneElse.archived[].quotedTrimstring, nullableA trim read from the listing, not from the buyer choice (third-party listing data). Released to an AI assistant by the CEO's decision D37 (2026-10-08).
everyoneElse.archived[].distanceMilesnumber, nullableDistance from the buyer ZIP in miles (third-party listing data). Before the dealership is unlocked this is the LOWER BOUND of the distance band (0, 10, 25, 50 or 100), not the distance: read distanceBand. Null for an AI assistant acting for the buyer.
everyoneElse.archived[].distanceBandstring, nullableThe distance band as words: Under 10 miles, 10 to 25 miles, 25 to 50 miles, 50 to 100 miles or Over 100 miles (third-party listing data). Always the band, never an exact distance. Null for an AI assistant acting for the buyer.
everyoneElse.archived[].priceCheckHrefstring, nullable
everyoneElse.archived[].isVerifiedPartnerbooleanTrue when this dealership is a Verified partner: it pays Ridekick a subscription and has agreed to honor its written price while the car is available, if the buyer qualifies for any rebates, incentives or financing in that price. Always present in answers to builders, and may be omitted from answers to hosted assistants; false means either that the dealership is not a partner or that its status is not shown for this row yet, so don't present false as "not a partner", and show the conditions above wherever you show true.

Example call

bash
curl -X GET "https://www.ridekick.com/api/v1/deal-sets/{id}" \
  -H "Authorization: Bearer $RIDEKICK_TOKEN"
javascript
const res = await fetch("https://www.ridekick.com/api/v1/deal-sets/{id}", {
  method: "GET",
  headers: { Authorization: `Bearer ${process.env.RIDEKICK_TOKEN}` },
});
const { data } = await res.json();
python
import os
import requests

res = requests.get("https://www.ridekick.com/api/v1/deal-sets/{id}", headers={"Authorization": f"Bearer {os.environ['RIDEKICK_TOKEN']}"})
data = res.json()["data"]

Example

json
{
  "data": {
    "dealSetId": "0b6f3c2e-9d41-4c7a-8e15-3a2f7c9d1e04",
    "car": {
      "year": 2026,
      "make": "Testmake",
      "model": "Testmodel",
      "trim": "Sport",
      "exteriorColor": "Blue",
      "interiorColor": "Black",
      "drivetrain": "AWD",
      "powertrain": "hybrid"
    },
    "search": {
      "buyerZip": "94110",
      "radiusMiles": 50
    },
    "counts": {
      "written": 1,
      "waiting": 1,
      "differentCar": 1,
      "ended": 1,
      "endedWithPrice": 1,
      "closedWithPrice": 0,
      "total": 4,
      "needsYou": 2
    },
    "headerLine": "1 written price, 1 waiting",
    "hero": {
      "rowKey": "neg-1",
      "label": "Dealer 1",
      "otdCents": 3800000,
      "sellingPriceCents": 3500000,
      "taxesAndFeesCents": 300000,
      "listedAtCents": 3650000,
      "writtenAt": "2026-09-28T13:00:00.000Z",
      "distanceMiles": 12.4,
      "distanceBand": "10 to 25 miles",
      "trim": "Sport",
      "gapToNextCents": 45000,
      "canChoose": true,
      "canUnlock": false,
      "chosen": false
    },
    "ranked": [
      {
        "trim": "Sport",
        "rows": [
          {
            "rowKey": "neg-1",
            "label": "Dealer 1",
            "hidden": true,
            "chosen": false,
            "archived": false,
            "state": "written",
            "ended": null,
            "statusLabel": "Written price",
            "otdCents": 3800000,
            "sellingPriceCents": 3500000,
            "listedAtCents": 3650000,
            "writtenAt": "2026-09-28T13:00:00.000Z",
            "gapToLowestCents": 0,
            "canChoose": true,
            "canUnlock": false,
            "quotedTrim": "Sport",
            "distanceMiles": 12.4,
            "distanceBand": "10 to 25 miles",
            "priceCheckHref": null,
            "isVerifiedPartner": true
          }
        ]
      }
    ],
    "needsYou": [
      {
        "kind": "question",
        "rowKey": "neg-2",
        "label": "Dealer 2",
        "promptId": "prompt-1",
        "category": "trade_in",
        "heading": "A question about your trade-in",
        "question": "Do you have a trade-in?",
        "answerMode": "freeform",
        "otdCents": 3900000
      },
      {
        "kind": "draft",
        "rowKey": "neg-3",
        "label": "Dealer 3",
        "requestId": "req-1",
        "preview": "A reply we drafted.",
        "previewComplete": true
      }
    ],
    "everyoneElse": {
      "waiting": [
        {
          "rowKey": "neg-2",
          "label": "Dealer 2",
          "hidden": true,
          "chosen": false,
          "archived": false,
          "state": "waiting",
          "ended": null,
          "statusLabel": "Waiting",
          "otdCents": null,
          "sellingPriceCents": null,
          "listedAtCents": 3650000,
          "writtenAt": null,
          "gapToLowestCents": null,
          "canChoose": false,
          "canUnlock": false,
          "quotedTrim": "Sport",
          "distanceMiles": 12.4,
          "distanceBand": "10 to 25 miles",
          "priceCheckHref": null,
          "isVerifiedPartner": true
        }
      ],
      "differentCar": [
        {
          "rowKey": "neg-3",
          "label": "Dealer 3",
          "hidden": true,
          "chosen": false,
          "archived": false,
          "state": "different_car",
          "ended": null,
          "statusLabel": "Different car",
          "otdCents": 3800000,
          "sellingPriceCents": 3500000,
          "listedAtCents": 3650000,
          "writtenAt": "2026-09-28T13:00:00.000Z",
          "gapToLowestCents": null,
          "canChoose": false,
          "canUnlock": false,
          "quotedTrim": "Base",
          "distanceMiles": 12.4,
          "distanceBand": "10 to 25 miles",
          "priceCheckHref": null,
          "isVerifiedPartner": true
        }
      ],
      "ended": [
        {
          "rowKey": "neg-4",
          "label": "Dealer 4",
          "hidden": true,
          "chosen": false,
          "archived": false,
          "state": "ended",
          "ended": "sold",
          "statusLabel": "Sold",
          "otdCents": 3800000,
          "sellingPriceCents": 3500000,
          "listedAtCents": 3650000,
          "writtenAt": "2026-09-28T13:00:00.000Z",
          "gapToLowestCents": null,
          "canChoose": false,
          "canUnlock": false,
          "quotedTrim": "Sport",
          "distanceMiles": 12.4,
          "distanceBand": "10 to 25 miles",
          "priceCheckHref": null,
          "isVerifiedPartner": true
        }
      ],
      "archived": []
    }
  }
}

Errors

StatusCodeMeans
404not_foundNo such resource, or not yours. Also answered while the endpoint is not turned on for you. Never 403: whether another buyer's resource exists is not disclosed.
401unauthenticatedSigned out, or the credential was not accepted: an access token that is not valid, or an Authorization header that is not a Ridekick access token.
503auth_unverifiableSign-in could not be confirmed. This is not the same as signed out.
503unavailableThe service did not answer right now, so nothing was returned or sent. Try again in a moment, and wait the number of seconds in Retry-After when it is present.
429rate_limitedToo many requests from this principal in the window.
403insufficient_scopeThe credential does not include the scope this endpoint needs. The WWW-Authenticate header names the required scope.
500internalSomething failed on our side. The response carries no data.

Last updated