Get a free key
Dealer specials

Dealer specials

id is stable for the life of an offer on its site (same platform offer id, same creative, or same make/model/year/type/amount): a changed payment keeps the id and is recorded in the history; an offer that disappears and returns keeps its id. source=published (default) is what v2 publishes; source=shadow is what it would publish for sites still in shadow. For incremental sync pass since (rows changed or removed since then) with status=all.

GEThttps://api.motorsdynamic.com/api/v2/specials

Plan and price

PlanAccessPrice
FreeNonot included
GrowthNonot included
ScaleNonot included
EnterpriseYescontract

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

Parameters

NameInTypeRequiredDescription
domain_idqueryintegernoOne site; without it, every entitled site.
statusqueryactive or removed or allno
sourcequerypublished or shadowno
sincequerystring (date-time)no
makequerystringno
limitqueryintegerno
cursorquerystringnopage.next_cursor from the previous page, unchanged.

Example request

curl "https://api.motorsdynamic.com/api/v2/specials?domain_id=201&status=all&limit=1" \
  -H "x-api-key: $MD_API_KEY"

Example response

{
  "data": [
    {
      "id": 9001,
      "domain_id": 201,
      "source": "published",
      "status": "active",
      "offer_key": "id:tel-1",
      "make": "Kia",
      "model": "Telluride",
      "model_year": 2026,
      "trim": null,
      "vin": null,
      "stock_number": null,
      "offer_type": "Lease",
      "offer_amount": "$499/mo",
      "monthly_payment": 499,
      "term": 36,
      "due_at_signing": 3999,
      "msrp": 38000,
      "selling_price": null,
      "offer_details": null,
      "disclaimer": "Lease for well-qualified lessees.",
      "raw_ocr_text": null,
      "expires_at": "2026-09-30",
      "offers": null,
      "image_url": null,
      "image_hash": null,
      "source_type": "html",
      "source_url": "https://www.kiaofexample.com/specials",
      "source_page_type": "specials",
      "strategy": "tv_api",
      "first_seen_at": "2026-09-20T10:00:00.000000Z",
      "last_seen_at": "2026-09-24T10:00:00.000000Z",
      "removed_at": null,
      "freshness": {
        "last_seen_at": "2026-09-24T10:00:00.000000Z",
        "last_complete_run_at": "2026-09-24T10:00:00.000000Z",
        "stale": false
      },
      "provenance": {
        "source": "v2_specials",
        "mode": "publish",
        "strategy": "tv_api",
        "run_id": 77,
        "first_run_id": 70
      }
    }
  ],
  "page": {
    "limit": 1,
    "has_more": false,
    "next_cursor": null
  },
  "meta": {
    "source": "published",
    "target": {
      "mode": "publish",
      "last_complete_at": "2026-09-24T10:00:00.000000Z",
      "next_crawl_at": "2026-09-24T10:00:00.000000Z",
      "last_outcome": "RECIPE_HIT",
      "alert": false,
      "alert_reason": null,
      "consecutive_failures": 0
    }
  }
}

Response fields

FieldTypeDescription
data[]array of object
data[].idintegerStable special id.
data[].domain_idinteger
data[].sourcepublished or shadow
data[].statusactive or removed
data[].offer_keystring
data[].makestring or null
data[].modelstring or null
data[].model_yearinteger or null
data[].trimstring or null
data[].vinstring or null
data[].stock_numberstring or null
data[].offer_typestring or null
data[].offer_amountstring or null
data[].monthly_paymentnumber or null
data[].terminteger or null
data[].due_at_signingnumber or null
data[].msrpnumber or null
data[].selling_pricenumber or null
data[].offer_detailsstring or null
data[].disclaimerstring or null
data[].raw_ocr_textstring or null
data[].expires_atstring or nullYYYY-MM-DD
data[].offersarray or null
data[].image_urlstring or null
data[].image_hashstring or null
data[].source_typestring or null
data[].source_urlstring or null
data[].source_page_typestring or null
data[].strategystring or null
data[].first_seen_atstring or nullRFC 3339 UTC with microseconds.
data[].last_seen_atstring or nullRFC 3339 UTC with microseconds.
data[].removed_atstring or nullRFC 3339 UTC with microseconds.
data[].freshnessobject
data[].freshness.last_seen_atstring or nullRFC 3339 UTC with microseconds.
data[].freshness.last_complete_run_atstring or nullRFC 3339 UTC with microseconds.
data[].freshness.staleboolean
data[].provenanceobject
data[].provenance.sourcev2_specials
data[].provenance.modeshadow or publish
data[].provenance.strategystring or nullHow the offer was found: tv_api, scene7_params, structured_slides, banner_ocr, offer_text (a card read as HTML text), ai_located, image_discovered.
data[].provenance.extractorstring or nullThe extractor that read the offer: offer-text:overfuel, offer-text:dealercom-promos, banner-ocr, scene7-params, structured-slides, dealervenom-card, tv-offers, reading: (a stored reading of the creative). Additive (2026-09-29).
data[].provenance.run_idinteger or null
data[].provenance.first_run_idinteger or null
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.