Get a free key
Total cost of ownership

Total cost of ownership

Growth and upView as Markdown

Depreciation from market asking prices of the model by model year, EPA fuel cost, and insurance and maintenance assumptions that are labelled and can be replaced. Taxes and fees are added with zip, loan interest with apr.

GEThttps://api.motorsdynamic.com/api/v2/tco/{vin}

Plan and price

PlanAccessPrice
FreeNonot included
GrowthYes$0.05 per call
ScaleYes$0.03 per call
EnterpriseYescontract

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

Parameters

NameInTypeRequiredDescription
vinpathstringyes17-character VIN (case-insensitive).
zipquerystringno5-digit ZIP code of a US state or DC.
pricequerynumbernoPrice to compute on. Default: the dealer's advertised price.
annualMilesqueryintegernoMiles driven a year.
insuranceAnnualquerynumbernoAnnual insurance premium. Default: a published national average.
maintenancePerMilequerynumbernoMaintenance, repair and tire cost per mile. Default: a published national average.
aprquerynumbernoAPR in percent. Default: the market estimate for the credit tier.
termqueryintegernoLoan term in months.
downquerynumbernoCash down payment.
tradeInquerynumbernoTrade-in value.
rebatequerynumbernoManufacturer rebate applied to the price.
docFeequerynumbernoDealer documentation fee. Default: the fee crawled with the car's listing.

Example request

curl "https://api.motorsdynamic.com/api/v2/tco/1HGCM82633A004352" \
  -H "x-api-key: $MD_API_KEY"

Response fields

FieldTypeDescription
metaobject
dataobject
data.vinstring
data.vehicleobject
data.vehicle.yearinteger or null
data.vehicle.makestring or null
data.vehicle.modelstring or null
data.vehicle.trimstring or null
data.zipstring or null
data.statestring or null
data.estimatetrue
data.years[]array of object
data.years[].yearinteger
data.years[].depreciationnumber
data.years[].depreciation_basismarket or default_curve
data.years[].value_end_of_yearnumber
data.years[].fuelnumber or null
data.years[].insurancenumber
data.years[].maintenance_and_repairsnumber
data.years[].taxes_and_feesnumber
data.years[].finance_interestnumber
data.years[].totalnumber
data.totalobject
data.total.depreciationnumber
data.total.fuelnumber or null
data.total.insurancenumber
data.total.maintenance_and_repairsnumber
data.total.taxes_and_feesnumber
data.total.finance_interestnumber
data.total.totalnumber
data.total.cost_per_milenumber
data.termsobject
data.terms.ownership_yearsinteger
data.terms.pricenumber
data.terms.price_sourcequery or dealer_advertised
data.terms.annual_milesobjectOne input of the ownership-cost estimate, with where it came from.
data.terms.insurance_annualobjectOne input of the ownership-cost estimate, with where it came from.
data.terms.maintenance_per_mileobjectOne input of the ownership-cost estimate, with where it came from.
data.terms.fuelobject
data.terms.depreciationobject
data.terms.taxes_and_feesobject
data.terms.financingobject
data.disclosurestring

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.
404not_foundNothing matches the identifier in the path.
429rate_limited or quota_exceededSlow down (see Retry-After), or the Free monthly calls are used up.
503errorSee the message.
504query_timeoutThe query passed its 4 second budget. Narrow the filters. Not billed.

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