Get a free key
Vehicle history

Vehicle history

Free and upView as Markdown

Every event recorded for a VIN, oldest first: the first listing, each price change, status changes and removal, with the dealer site it was seen on. meta.sources reports the status of each history source. A page with a failing source has meta.partial: true and no next_cursor: retry it.

GEThttps://api.motorsdynamic.com/api/v2/vehicles/{vin}/timeline

Plan and price

PlanAccessPrice
FreeYesincluded in the 1,000 monthly calls
GrowthYes$0.0015 per call
ScaleYes$0.0009 per call
EnterpriseYescontract

A call is billed when it answers 2xx. See pricing.

Parameters

NameInTypeRequiredDescription
vinpathstringyes
sourcesquerystringnoComma-separated subset of v2, md_legacy, foureyes.
sincequerystring (date-time)no
untilquerystring (date-time)no
limitqueryintegerno
cursorquerystringnopage.next_cursor from the previous page, unchanged.

Example request

curl "https://api.motorsdynamic.com/api/v2/vehicles/1FTFW1E50NFA00001/timeline?sources=v2%2Cmd_legacy&limit=2" \
  -H "x-api-key: $MD_API_KEY"

Example response

{
  "data": [
    {
      "event_id": "10000000-0000-5000-8000-000000000001",
      "domain_id": 101,
      "vin": "1FTFW1E50NFA00001",
      "source_key": "1FTFW1E50NFA00001",
      "event_type": "listed",
      "observed_at": "2026-06-01T12:00:00.500000Z",
      "prev": null,
      "next": {
        "price": 45000
      },
      "entity_version": null,
      "episode": null,
      "freshness": {
        "observed_at": "2026-06-01T12:00:00.500000Z"
      },
      "provenance": {
        "source": "md_legacy",
        "adapter_version": "md_legacy-2026-09-24",
        "run_id": null,
        "quality": "ok"
      }
    },
    {
      "event_id": "00000000-0000-4000-8000-000000000002",
      "domain_id": 101,
      "vin": "1FTFW1E50NFA00001",
      "source_key": "1FTFW1E50NFA00001",
      "event_type": "price_changed",
      "observed_at": "2026-09-21T00:00:00.000000Z",
      "prev": {
        "price": 41000
      },
      "next": {
        "price": 40000
      },
      "entity_version": 3,
      "episode": 1,
      "freshness": {
        "observed_at": "2026-09-21T00:00:00.000000Z"
      },
      "provenance": {
        "source": "v2",
        "adapter_version": "dealer-inspire@3",
        "run_id": 77,
        "quality": null
      }
    }
  ],
  "page": {
    "limit": 2,
    "has_more": false,
    "next_cursor": null
  },
  "meta": {
    "vin": "1FTFW1E50NFA00001",
    "sources": {
      "v2": "ok",
      "md_legacy": "ok"
    },
    "partial": false
  }
}

Response fields

FieldTypeDescription
data[]array of object
data[].event_idstring (uuid)
data[].domain_idinteger or null
data[].vinstring or null
data[].source_keystring or null
data[].event_typelisted or price_changed or price_basis_changed or mileage_changed or photos_changed or status_changed or correction
data[].observed_atstring
data[].prevobjectState before the event (object or null).
data[].nextobjectState after the event (object or null).
data[].entity_versioninteger or null
data[].episodeinteger or null
data[].freshnessobject
data[].freshness.observed_atstring
data[].provenanceobject
data[].provenance.sourcev2 or md_legacy or foureyes
data[].provenance.adapter_versionstring or null
data[].provenance.run_idinteger or null
data[].provenance.qualitystring or nullComma list of archive caveats, for example mass_removal_hour.
pageobject
page.limitinteger
page.has_moreboolean
page.next_cursorstring or null
metaobject
meta.vinstring
meta.partialboolean
meta.sourcesobject

Errors

StatusCodeWhen
400invalid_parameterA parameter is missing or malformed. The message names it.
401invalid_api_keyThe key is missing, revoked or mistyped.
403not_entitledThe key may not read this dealer or source.
429rate_limited or quota_exceededSlow down (see Retry-After), or the Free monthly calls are used up.
504query_timeoutThe query passed its 4 second budget. Narrow the filters. Not billed.

Every error has the same body. Full list: errors.