Get a free key
OEM incentives

OEM incentives

Growth and upView as Markdown
GEThttps://api.motorsdynamic.com/api/v2/offers

Plan and price

PlanAccessPrice
FreeNonot included
GrowthYes$0.005 per call
ScaleYes$0.003 per call
EnterpriseYescontract

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

Parameters

NameInTypeRequiredDescription
makequerystringno
modelquerystringno
yearqueryintegerno
zipquerystringno
offer_typequerystringno
statusqueryactive or allno
updated_sincequerystring (date-time)no
includequeryhistorynohistory adds each offer's last 50 term changes.
limitqueryintegerno
cursorquerystringnopage.next_cursor from the previous page, unchanged.

Example request

curl "https://api.motorsdynamic.com/api/v2/offers?make=Honda&zip=15205&include=history" \
  -H "x-api-key: $MD_API_KEY"

Example response

{
  "data": [
    {
      "id": 1,
      "offer_key": "honda-crv-1",
      "make": "Honda",
      "model": "CR-V",
      "model_year": 2025,
      "trim": [
        "EX",
        "EX-L"
      ],
      "body_style": null,
      "model_code": null,
      "offer_type": "lease",
      "condition": null,
      "title": "Lease a 2025 CR-V",
      "description": null,
      "disclaimer": "Closed-end lease...",
      "value_display": "$300/mo",
      "image": null,
      "geography": {
        "postal_code": "15205",
        "region": null
      },
      "terms": {
        "cash_amount": null,
        "apr": 2.9,
        "apr_term_months": null,
        "lease_payment": 300,
        "lease_term": 36,
        "lease_due": 2999,
        "msrp": 35000,
        "selling_price": null
      },
      "valid": {
        "start_date": "2026-09-01",
        "end_date": "2026-09-30"
      },
      "status": "active",
      "removed_at": null,
      "version": {
        "number": 3,
        "last_changed_at": "2026-09-10T00:00:00.000000Z"
      },
      "first_seen_at": "2026-08-01T00:00:00.000000Z",
      "freshness": {
        "last_seen_at": "2026-09-24T05:00:00.000000Z",
        "observed_at": "2026-09-24T05:00:00.000000Z"
      },
      "provenance": {
        "source": "oem_offers",
        "source_id": 4,
        "program_id": null,
        "vendor": 1
      },
      "history": [
        {
          "change_type": "updated",
          "field": "apr",
          "old_value": "3.9",
          "new_value": "2.9",
          "changed_at": "2026-09-10T00:00:00.000000Z"
        }
      ]
    }
  ],
  "page": {
    "limit": 100,
    "has_more": false,
    "next_cursor": null
  },
  "meta": {}
}

Response fields

FieldTypeDescription
data[]array of object
data[].idinteger
data[].offer_keystring or null
data[].makestring
data[].modelstring or null
data[].model_yearinteger or null
data[].trimobjectTrim list or object as published by the OEM.
data[].body_stylestring or null
data[].model_codestring or null
data[].offer_typestring or null
data[].conditionstring or null
data[].titlestring or null
data[].descriptionstring or null
data[].disclaimerstring or null
data[].value_displaystring or null
data[].imagestring or null
data[].geographyobject
data[].geography.postal_codestring or null
data[].geography.regionstring or null
data[].termsobject
data[].terms.cash_amountnumber or null
data[].terms.aprnumber or null
data[].terms.apr_term_monthsinteger or null
data[].terms.lease_paymentnumber or null
data[].terms.lease_terminteger or null
data[].terms.lease_duenumber or null
data[].terms.msrpnumber or null
data[].terms.selling_pricenumber or null
data[].validobject
data[].valid.start_datestring or null
data[].valid.end_datestring or null
data[].statusactive or removed
data[].removed_atstring or nullRFC 3339 UTC with microseconds.
data[].versionobject
data[].version.numberinteger1 + recorded term changes.
data[].version.last_changed_atstring or nullRFC 3339 UTC with microseconds.
data[].first_seen_atstring or nullRFC 3339 UTC with microseconds.
data[].freshnessobject
data[].freshness.last_seen_atstring or nullRFC 3339 UTC with microseconds.
data[].freshness.observed_atstring or nullRFC 3339 UTC with microseconds.
data[].freshness.age_secondsinteger or null
data[].provenanceobject
data[].provenance.sourceoem_offers
data[].provenance.source_idinteger or null
data[].provenance.program_idinteger or null
data[].provenance.vendorinteger or null
data[].history[]array of object
data[].history[].change_typestring
data[].history[].fieldstring or null
data[].history[].old_valuestring or null
data[].history[].new_valuestring or null
data[].history[].changed_atstring or nullRFC 3339 UTC with microseconds.
pageobject
page.limitinteger
page.has_moreboolean
page.next_cursorstring or null
metaobject

Errors

StatusCodeWhen
400invalid_parameterA parameter is missing or malformed. The message names it.
401invalid_api_keyThe key is missing, revoked or mistyped.
402plan_requiredThe endpoint is on a higher plan. The body names the plan and links to the upgrade.
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.