Get a free key
Collection runs

Collection runs

Newest first. Specials runs carry the never-blank outcome, OCR and LLM counts.

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

Plan and price

PlanAccessPrice
FreeNonot included
GrowthNonot included
ScaleNonot included
EnterpriseYescontract

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

Parameters

NameInTypeRequiredDescription
domain_idqueryintegeryes
kindqueryinventory or specialsno
limitqueryintegerno
cursorquerystringnopage.next_cursor from the previous page, unchanged.

Example request

curl "https://api.motorsdynamic.com/api/v2/runs?domain_id=201&kind=specials" \
  -H "x-api-key: $MD_API_KEY"

Example response

{
  "data": [
    {
      "run_id": 77,
      "domain_id": 201,
      "kind": "specials",
      "state": "complete",
      "mode": "publish",
      "started_at": "2026-09-24T10:00:00.000000Z",
      "finished_at": "2026-09-24T10:00:00.000000Z",
      "adapter_version": "specials-generic-1",
      "fetch_tier": "direct",
      "pages_fetched": 3,
      "requests": 4,
      "counts": {
        "added": 1,
        "changed": 1,
        "unchanged": 5,
        "removed": 0
      },
      "error": null,
      "specials": {
        "outcome": "RECIPE_HIT",
        "reason": "7 validated via proven recipe(s)",
        "cms": "teamvelocity",
        "observations": 7,
        "listed": 1,
        "changed": 1,
        "relisted": 0,
        "unchanged": 5,
        "removed": 0,
        "renders": 0,
        "ocr_read": 0,
        "ocr_skipped": {},
        "llm_calls": 0,
        "llm_capped": false,
        "strategies": {
          "tv_api": 7
        }
      }
    }
  ],
  "page": {
    "limit": 50,
    "has_more": false,
    "next_cursor": null
  },
  "meta": {}
}

Response fields

FieldTypeDescription
data[]array of object
data[].run_idinteger
data[].domain_idinteger
data[].kindinventory or specials
data[].stateclaimed or running or complete or incomplete or failed or expired
data[].modeshadow or publish
data[].started_atstring or nullRFC 3339 UTC with microseconds.
data[].finished_atstring or nullRFC 3339 UTC with microseconds.
data[].adapter_versionstring or null
data[].fetch_tierstring or null
data[].pages_fetchedinteger or null
data[].requestsinteger or null
data[].countsobject
data[].counts.addedinteger
data[].counts.changedinteger
data[].counts.unchangedinteger
data[].counts.removedinteger
data[].errorobject or null
data[].error.classstring
data[].error.messagestring or null
data[].specialsobject or null
data[].specials.outcomeRECIPE_HIT or DISCOVERY_HIT or SWEEP_INCOMPLETE or RECIPE_MISS or CONFIRMED_NONE
data[].specials.reasonstring or null
data[].specials.cmsstring or null
data[].specials.observationsinteger
data[].specials.listedinteger
data[].specials.changedinteger
data[].specials.relistedinteger
data[].specials.unchangedinteger
data[].specials.removedinteger
data[].specials.rendersinteger
data[].specials.ocr_readinteger
data[].specials.ocr_skippedobject
data[].specials.llm_callsinteger
data[].specials.llm_cappedboolean
data[].specials.strategiesobject
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.