Car-buying math and state rules: out-the-door prices, quote checks, leases and trade-ins
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Reads a dealer's out-the-door quote, pasted as text (up to 8 KB) or given as line items, and checks it line by line: the out-the-door total, the doc fee against the state's cap (and capped service fees such as Ohio's $50 convenience fee), the tax line against the state's rate, finance-office add-ons with typical prices, the trade allowance against written trade-in offers, the trade equity and amount financed, and the walk line. Lines with an email address or phone number are removed before reading and never returned. Nothing is stored.
Two-letter state code (DC included), like PA
The quote as pasted (an email or a buyer's order). Leave out to send lines instead.
The quote as line items, instead of text
Combined sales tax rate as a decimal; leave out to use the state's rate
The walk line, out the door
Written trade-in offers, to compare the best open one with the allowance
The trade-in allowance on the quote, when sending lines (read from text otherwise)
The best written trade-in offer still open (CarMax, Carvana...), to compare with the allowance
Reads a dealer's out-the-door quote, pasted as text (up to 8 KB) or given as line items, and checks it line by line: the out-the-door total, the doc fee against the state's cap (and capped service fees such as Ohio's $50 convenience fee), the tax line against the state's rate, finance-office add-ons with typical prices, the trade allowance against written trade-in offers, the trade equity and amount financed, and the walk line. Lines with an email address or phone number are removed before reading and never returned. Nothing is stored.
| Argument | Type | Description |
|---|---|---|
| text | string | The quote as pasted (an email or a buyer's order). Leave out to send lines instead. |
| lines | object | The quote as line items, instead of text |
| state* | string | Two-letter state code (DC included), like PA |
| tax_rate | number | Combined sales tax rate as a decimal; leave out to use the state's rate |
| walk_line | number | The walk line, out the door |
| trade_offers | array | Written trade-in offers, to compare the best open one with the allowance |
| trade_allowance | number | The trade-in allowance on the quote, when sending lines (read from text otherwise) |
| best_trade_offer | number | The best written trade-in offer still open (CarMax, Carvana...), to compare with the allowance |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"state"
],
"properties": {
"text": {
"type": "string",
"maxLength": 8192,
"description": "The quote as pasted (an email or a buyer's order). Leave out to send lines instead."
},
"lines": {
"type": "object",
"required": [
"vehicle_price"
],
"properties": {
"dealer": {
"type": "string",
"pattern": "^[^\\r\\n]*$",
"maxLength": 60,
"minLength": 1,
"description": "The dealership's name (a business, never a person)"
},
"add_ons": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"amount"
],
"properties": {
"name": {
"type": "string",
"pattern": "^[^\\r\\n]*$",
"maxLength": 60,
"minLength": 1,
"description": "What the dealer calls the add-on"
},
"amount": {
"type": "number",
"maximum": 100000,
"minimum": 0,
"description": "Its price"
}
}
},
"default": [],
"maxItems": 12
},
"doc_fee": {
"type": "number",
"default": 0,
"maximum": 5000,
"minimum": 0,
"description": "Doc fee"
},
"rebates": {
"type": "number",
"default": 0,
"maximum": 1000000,
"minimum": 0,
"description": "Rebates or discounts shown below the price"
},
"sales_tax": {
"type": "number",
"default": 0,
"maximum": 200000,
"minimum": 0,
"description": "The quote's sales tax line"
},
"title_reg": {
"type": "number",
"default": 0,
"maximum": 10000,
"minimum": 0,
"description": "Title, registration and other government fees"
},
"other_fees": {
"type": "number",
"default": 0,
"maximum": 50000,
"minimum": 0,
"description": "Any other fee"
},
"vehicle_price": {
"type": "number",
"maximum": 1000000,
"minimum": 0,
"description": "Selling price before rebates, fees and tax"
}
},
"description": "The quote as line items, instead of text"
},
"state": {
"enum": [
"AK",
"AL",
"AR",
"AZ",
"CA",
"CO",
"CT",
"DC",
"DE",
"FL",
"GA",
"HI",
"IA",
"ID",
"IL",
"IN",
"KS",
"KY",
"LA",
"MA",
"MD",
"ME",
"MI",
"MN",
"MO",
"MS",
"MT",
"NC",
"ND",
"NE",
"NH",
"NJ",
"NM",
"NV",
"NY",
"OH",
"OK",
"OR",
"PA",
"RI",
"SC",
"SD",
"TN",
"TX",
"UT",
"VA",
"VT",
"WA",
"WI",
"WV",
"WY"
],
"type": "string",
"description": "Two-letter state code (DC included), like PA"
},
"tax_rate": {
"type": "number",
"maximum": 0.25,
"minimum": 0,
"description": "Combined sales tax rate as a decimal; leave out to use the state's rate"
},
"walk_line": {
"type": "number",
"maximum": 1000000,
"minimum": 0,
"description": "The walk line, out the door"
},
"trade_offers": {
"type": "array",
"items": {
"type": "object",
"required": [
"source",
"amount"
],
"properties": {
"amount": {
"type": "number",
"maximum": 1000000,
"minimum": 0,
"description": "The offer"
},
"source": {
"type": "string",
"pattern": "^[^\\r\\n]*$",
"maxLength": 60,
"minLength": 1,
"description": "Who made the offer: CarMax, Carvana, a dealer. Never a person."
},
"expires": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Its last day, yyyy-mm-dd"
}
}
},
"maxItems": 6,
"minItems": 1,
"description": "Written trade-in offers, to compare the best open one with the allowance"
},
"trade_allowance": {
"type": "number",
"maximum": 1000000,
"minimum": 0,
"description": "The trade-in allowance on the quote, when sending lines (read from text otherwise)"
},
"best_trade_offer": {
"type": "number",
"maximum": 1000000,
"minimum": 0,
"description": "The best written trade-in offer still open (CarMax, Carvana...), to compare with the allowance"
}
}
}Ranks two to ten itemized dealer quotes by out-the-door price, with each one's gap to the lowest and to the walk line, and (with a state) each doc fee against the state's cap.
| Argument | Type | Description |
|---|---|---|
| state | string | Two-letter state code (DC included), like PA |
| quotes* | array | |
| walk_line | number | The walk line, out the door |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"quotes"
],
"properties": {
"state": {
"enum": [
"AK",
"AL",
"AR",
"AZ",
"CA",
"CO",
"CT",
"DC",
"DE",
"FL",
"GA",
"HI",
"IA",
"ID",
"IL",
"IN",
"KS",
"KY",
"LA",
"MA",
"MD",
"ME",
"MI",
"MN",
"MO",
"MS",
"MT",
"NC",
"ND",
"NE",
"NH",
"NJ",
"NM",
"NV",
"NY",
"OH",
"OK",
"OR",
"PA",
"RI",
"SC",
"SD",
"TN",
"TX",
"UT",
"VA",
"VT",
"WA",
"WI",
"WV",
"WY"
],
"type": "string",
"description": "Two-letter state code (DC included), like PA"
},
"quotes": {
"type": "array",
"items": {
"type": "object",
"required": [
"vehicle_price"
],
"properties": {
"dealer": {
"type": "string",
"pattern": "^[^\\r\\n]*$",
"maxLength": 60,
"minLength": 1,
"description": "The dealership's name (a business, never a person)"
},
"add_ons": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"amount"
],
"properties": {
"name": {
"type": "string",
"pattern": "^[^\\r\\n]*$",
"maxLength": 60,
"minLength": 1,
"description": "What the dealer calls the add-on"
},
"amount": {
"type": "number",
"maximum": 100000,
"minimum": 0,
"description": "Its price"
}
}
},
"default": [],
"maxItems": 12
},
"doc_fee": {
"type": "number",
"default": 0,
"maximum": 5000,
"minimum": 0,
"description": "Doc fee"
},
"rebates": {
"type": "number",
"default": 0,
"maximum": 1000000,
"minimum": 0,
"description": "Rebates or discounts shown below the price"
},
"sales_tax": {
"type": "number",
"default": 0,
"maximum": 200000,
"minimum": 0,
"description": "The quote's sales tax line"
},
"title_reg": {
"type": "number",
"default": 0,
"maximum": 10000,
"minimum": 0,
"description": "Title, registration and other government fees"
},
"other_fees": {
"type": "number",
"default": 0,
"maximum": 50000,
"minimum": 0,
"description": "Any other fee"
},
"vehicle_price": {
"type": "number",
"maximum": 1000000,
"minimum": 0,
"description": "Selling price before rebates, fees and tax"
}
}
},
"maxItems": 10,
"minItems": 2
},
"walk_line": {
"type": "number",
"maximum": 1000000,
"minimum": 0,
"description": "The walk line, out the door"
}
}
}Fills one of the six Before the Lot email templates (request a quote, make an offer, a competing quote, confirm the deal, decline, tell a lender) with the details given and returns the subject and body. Details are numbers and short labels; contact details are refused.
| Argument | Type | Description |
|---|---|---|
| kind* | string | Which email |
| details | object |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"kind"
],
"properties": {
"kind": {
"enum": [
"request-quote",
"make-offer",
"competing-quote",
"confirm-deal",
"decline",
"lender-deal"
],
"type": "string",
"description": "Which email"
},
"details": {
"type": "object",
"default": {},
"properties": {
"car": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "The car, like \"2024 Honda CR-V EX\""
},
"offer": {
"type": "number",
"maximum": 1000000,
"minimum": 0
},
"dealer": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Dealer name"
},
"lender": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Lender name"
},
"used_car": {
"type": "boolean"
},
"decide_by": {
"type": "string",
"maxLength": 40,
"description": "A date or \"Friday\""
},
"walk_line": {
"type": "number",
"maximum": 1000000,
"minimum": 0,
"description": "The walk line, out the door. The templates never state it; an offer above it is not drafted"
},
"apr_percent": {
"type": "number",
"maximum": 40,
"minimum": 0
},
"term_months": {
"type": "integer",
"maximum": 120,
"minimum": 1
},
"down_payment": {
"type": "number",
"maximum": 1000000,
"minimum": 0
},
"pre_approved": {
"type": "boolean"
},
"stock_or_vin": {
"type": "string",
"maxLength": 40
},
"trade_equity": {
"type": "number",
"maximum": 1000000,
"minimum": -1000000
},
"amount_to_finance": {
"type": "number",
"maximum": 1000000,
"minimum": 0
},
"out_the_door_price": {
"type": "number",
"maximum": 1000000,
"minimum": 0
}
},
"additionalProperties": false
}
}
}The Before the Lot line for a moment at the desk. Pass a script id (monthly-payment, trade-first, down-payment, credit-check, numbers-changed, preinstalled-add-ons, initial-worksheet, decide-today, beat-my-rate, fi-product, only-a-month, paint-or-markup, below-invoice, trade-below-offer, leaving) or a short description of the situation.
| Argument | Type | Description |
|---|---|---|
| situation* | string | A script id or a short description, like "they keep asking my monthly payment" |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"situation"
],
"properties": {
"situation": {
"type": "string",
"maxLength": 200,
"minLength": 2,
"description": "A script id or a short description, like \"they keep asking my monthly payment\""
}
}
}The Before the Lot method: an overview and its seven stages (what to collect, what each produces, which guides, tools and email templates apply, and when the stage is done). Pass a stage id for one stage.
| Argument | Type | Description |
|---|---|---|
| stage | string | One stage id; leave out for the whole method |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"stage": {
"enum": [
"see-the-four-square",
"lock-three-squares",
"price-as-out-the-door",
"set-your-numbers",
"dealers-compete",
"at-the-desk",
"after-the-lot"
],
"type": "string",
"description": "One stage id; leave out for the whole method"
}
}
}Works a lease quote from MSRP, selling price, residual and money factor (or the lease's APR): the depreciation and rent charges, the payment with tax (and a state lease tax on top where there is one, such as Pennsylvania's 3%; Alabama's 1.5% and West Virginia's 5% lease-payment rates in place of their sales rates; in states that tax a lease once at the start, such as Texas and Ohio, the payment carries no tax and the result says so), the money factor as an APR, and the total cost. With a loan APR and term, it also compares leasing with buying the same car over the lease's months (on a labelled depreciation assumption).
| Argument | Type | Description |
|---|---|---|
| city | string | City or county in the state's rate table (23 states; state_rules says which), like Pittsburgh or Allegheny County: sets the combined rate from the state's own rate file. Where a city is in several counties (Chicago, Milwaukee), give county too. A place name only, never an address or ZIP |
| fees | number | Acquisition and other fees rolled into the lease |
| msrp* | number | MSRP (sticker price) |
| state* | string | Two-letter state code (DC included), like PA |
| county | string | County from the state's list (Pennsylvania, Nevada, Wisconsin; state_rules lists them), like Allegheny County: sets the combined rate. A county name only, never an address or ZIP |
The monthly payment, total interest and total paid on a car loan, with what a term over 60 months adds in interest compared with 60.
| Argument | Type | Description |
|---|---|---|
| apr* | number | APR in percent |
| amount* | number | Amount financed |
| term_months* | integer | Term in months |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"amount",
"apr",
"term_months"
],
"properties": {
"apr": {
"type": "number",
"maximum": 40,
"minimum": 0,
"description": "APR in percent"
},
"amount": {
"type": "number",
"maximum": 2000000,
"minimum": 0,
"description": "Amount financed"
},
"term_months": {
"type": "integer",
"maximum": 120,
"minimum": 6,
"description": "Term in months"
}
}
}Where a maker lists its own current offers (and a model's own page where one can be built), with whether the maker lists national offers at all.
| Argument | Type | Description |
|---|---|---|
| make* | string | Make, like Toyota |
| model | string | Model, like Corolla Cross |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"make"
],
"properties": {
"make": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Make, like Toyota"
},
"model": {
"type": "string",
"maxLength": 40,
"description": "Model, like Corolla Cross"
}
}
}Itemizes an out-the-door estimate for a vehicle price: rebates, doc fee, add-ons, the state's sales tax (with its rules on rebates and caps), title and registration. Optionally adds a trade-in (and the tax it saves where the state credits it), a down payment and a loan for the payment. Compares the doc fee with the state's cap and the total with a walk line.
| Argument | Type | Description |
|---|---|---|
| apr | number | Loan APR in percent, for the payment |
| city | string | City or county in the state's rate table (23 states; state_rules says which), like Pittsburgh or Allegheny County: sets the combined rate from the state's own rate file. Where a city is in several counties (Chicago, Milwaukee), give county too. A place name only, never an address or ZIP |
| down | number | Cash down payment |
| price* | number | Vehicle selling price before rebates, fees and tax |
| state* | string | Two-letter state code (DC included), like PA |
| county | string | County from the state's list (Pennsylvania, Nevada, Wisconsin; state_rules lists them), like Allegheny County: sets the combined rate. A county name only, never an address or ZIP |
| add_ons |
A payoff plan for a car loan, for paying it off early with an extra payment each month: the months and total interest at the regular payment, and with an extra amount toward principal each month (optionally for only the first so many months, or skipping some), with the months and interest the extra saves and the payoff month each way. Give the balance, the APR, and the months left or the regular payment. Lenders differ in how they apply extra payments, and some charge a prepayment penalty.
| Argument | Type | Description |
|---|---|---|
| apr* | number | The loan APR in percent |
| balance* | number | What is owed today |
| payment | number | The regular monthly payment; or give months_left instead |
| months_left | integer | Payments left at the regular payment; or give payment instead |
| skip_months | array | Months (1 is the next payment) with nothing extra paid |
| extra_monthly* | number | Extra paid toward principal each month |
| extra_for_months | integer | Pay the extra for only the first this-many months; leave out for every month |
Builds a Before the Lot planner link that opens with the numbers given already filled in. The plan travels in the link itself, so nothing is stored. Numbers and short labels only; names, phone numbers and emails are refused.
| Argument | Type | Description |
|---|---|---|
| plan* | object | The parts of the plan to fill in |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"plan"
],
"properties": {
"plan": {
"type": "object",
"properties": {
"car": {
"type": "object",
"properties": {
"make": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Make"
},
"trim": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Trim"
},
"year": {
"type": "integer",
"maximum": 2100,
"minimum": 1980
},
"model": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Model"
},
"condition": {
"enum": [
"new",
"used"
],
"type": "string"
},
"targetPrice": {
"anyOf": [
{
"type": "number",
"maximum": 10000000,
"minimum": 0
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"down": {
"type": "object",
"properties": {
"amount": {
"anyOf": [
{
"type": "number",
"maximum": 10000000,
"minimum": 0
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"price": {
"type": "object",
"properties": {
"state": {
"type": "string",
"pattern": "^[A-Za-z]{2}$"
},
"quotes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"addOns": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Add-on"
},
"amount": {
"type": "number",
"maximum": 10000000,
"minimum": 0
}
},
"additionalProperties": false
},
"maxItems": 20
},
"dealer": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Dealer"
},
"docFee": {
"type": "number",
"maximum": 10000000,
"minimum": 0
},
"rebates": {
"type": "number",
"maximum": 10000000,
"minimum": 0
},
"salesTax": {
"type": "number",
"maximum": 10000000,
"minimum": 0
},
"titleReg": {
"type": "number",
"maximum": 10000000,
"minimum": 0
},
"otherFees": {
"type": "number",
"maximum": 10000000,
"minimum": 0
},
"receivedOn": {
"anyOf": [
{
"type": "string",
"maxLength": 40
},
{
"type": "null"
}
]
},
"vehiclePrice": {
"type": "number",
"maximum": 10000000,
"minimum": 0
}
},
"additionalProperties": false
},
"maxItems": 10
},
"taxRate": {
"type": "number",
"maximum": 0.2,
"minimum": 0
},
"walkLine": {
"anyOf": [
{
"type": "number",
"maximum": 10000000,
"minimum": 0
},
{
"type": "null"
}
]
},
"fairPrice": {
"anyOf": [
{
"type": "number",
"maximum": 10000000,
"minimum": 0
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"trade": {
"type": "object",
"properties": {
"offers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"amount": {
"type": "number",
"maximum": 10000000,
"minimum": 0
},
"source": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Where the offer came from"
},
"expires": {
"anyOf": [
{
"type": "string",
"maxLength": 40
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"maxItems": 10
},
"payoff": {
"type": "number",
"maximum": 10000000,
"minimum": 0
},
"estimate": {
"anyOf": [
{
"type": "number",
"maximum": 10000000,
"minimum": 0
},
{
"type": "null"
}
]
},
"hasTrade": {
"type": [
"boolean",
"null"
]
}
},
"additionalProperties": false
},
"budget": {
"type": "object",
"properties": {
"maxPayment": {
"type": "number",
"maximum": 10000000,
"minimum": 0
},
"termMonths": {
"type": "integer",
"maximum": 120,
"minimum": 1
}
},
"additionalProperties": false
},
"financing": {
"type": "object",
"properties": {
"lender": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Lender"
},
"maxAmount": {
"anyOf": [
{
"type": "number",
"maximum": 10000000,
"minimum": 0
},
{
"type": "null"
}
]
},
"aprPercent": {
"anyOf": [
{
"type": "number",
"maximum": 40,
"minimum": 0
},
{
"type": "null"
}
]
},
"termMonths": {
"anyOf": [
{
"type": "integer",
"maximum": 120,
"minimum": 1
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
}
},
"description": "The parts of the plan to fill in",
"additionalProperties": false
}
}
}Compares a maker's cash rebate taken with the person's own loan against the maker's special APR (with any cash that combines with it): each side's payment, interest and total, the difference, the own-loan rate where the two cost the same, and the sales tax a rebate saves in states that tax the price after it. Give the amount financed before the rebate, or a vehicle price to work it out.
| Argument | Type | Description |
|---|---|---|
| city | string | City or county in the state's rate table (23 states; state_rules says which), like Pittsburgh or Allegheny County: sets the combined rate from the state's own rate file. Where a city is in several counties (Chicago, Milwaukee), give county too. A place name only, never an address or ZIP |
| down | number | Cash down payment |
| state* | string | Two-letter state code (DC included), like PA |
| county | string | County from the state's list (Pennsylvania, Nevada, Wisconsin; state_rules lists them), like Allegheny County: sets the combined rate. A county name only, never an address or ZIP |
| rebate* | number | Cash rebate available with your own loan or cash |
| doc_fee | number | Doc fee; leave out to assume the state's cap, or a typical $450 where there is none |
Compares a car loan as it stands with a new loan at a quoted rate, by default over the same months left so a lower payment cannot hide a longer loan, with any fees counted: the new payment, the monthly difference and the total interest saved or added.
| Argument | Type | Description |
|---|---|---|
| fees | number | Fees for the new loan |
| balance* | number | What is owed today |
| new_apr* | number | The APR a lender quoted for the new loan |
| current_apr* | number | Current APR in percent |
| current_payment* | number | Current monthly payment |
| new_term_months | integer | New term; leave out to keep the months left |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"balance",
"current_apr",
"current_payment",
"new_apr"
],
"properties": {
"fees": {
"type": "number",
"default": 0,
"maximum": 10000,
"minimum": 0,
"description": "Fees for the new loan"
},
"balance": {
"type": "number",
"maximum": 2000000,
"minimum": 0,
"description": "What is owed today"
},
"new_apr": {
"type": "number",
"maximum": 40,
"minimum": 0,
"description": "The APR a lender quoted for the new loan"
},
"current_apr": {
"type": "number",
"maximum": 40,
"minimum": 0,
"description": "Current APR in percent"
},
"current_payment": {
"type": "number",
"maximum": 50000,
"minimum": 0,
"description": "Current monthly payment"
},
"new_term_months": {
"type": "integer",
"maximum": 120,
"minimum": 6,
"description": "New term; leave out to keep the months left"
}
}
}A state's rules on dealer doc fees, sales tax (state rate, local add-on range, cap), trade-in tax credit, how a maker's rebate is taxed, and cancellation rights where on file, each with its source, as-of date and confidence, plus the link to the state's page.
| Argument | Type | Description |
|---|---|---|
| state* | string | Two-letter state code, like PA |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"state"
],
"properties": {
"state": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "Two-letter state code, like PA"
}
}
}From written trade-in offers and the payoff: the best offer still open (the floor a dealer's trade number is compared with), the equity or negative equity, and, with a state and vehicle price, the sales tax the trade saves where the state credits it.
| Argument | Type | Description |
|---|---|---|
| city | string | City or county in the state's rate table (23 states; state_rules says which), like Pittsburgh or Allegheny County: sets the combined rate from the state's own rate file. Where a city is in several counties (Chicago, Milwaukee), give county too. A place name only, never an address or ZIP |
| state | string | Two-letter state code (DC included), like PA |
| county | string | County from the state's list (Pennsylvania, Nevada, Wisconsin; state_rules lists them), like Allegheny County: sets the combined rate. A county name only, never an address or ZIP |
| offers* | array | |
| payoff | number | What is still owed on the car |
| doc_fee | number | Doc fee; leave out to assume the state's cap, or a typical $450 where there is none |
| tax_rate | number | Combined sales tax rate as a decimal, local tax included (0.07 for 7%); leave out to use the state's rate |
Works out the budget ceiling from a monthly payment: the most that can be financed, the highest out-the-door price after the trade-in tax credit, that ceiling as dealers quote it (before the trade-in credit), and the vehicle price it leaves after the state's tax and typical fees. With a fair price from research, it also gives an opening offer and a walk line. Numbers only; nothing is stored.
| Argument | Type | Description |
|---|---|---|
| apr* | number | Loan APR in percent (6.49 means 6.49%); a pre-approval rate if they have one |
| city | string | City or county in the state's rate table (23 states; state_rules says which), like Pittsburgh or Allegheny County: sets the combined rate from the state's own rate file. Where a city is in several counties (Chicago, Milwaukee), give county too. A place name only, never an address or ZIP |
| down | number | Cash down payment |
| state* | string | Two-letter state code (DC included), like PA |
| county | string | County from the state's list (Pennsylvania, Nevada, Wisconsin; state_rules lists them), like Allegheny County: sets the combined rate. A county name only, never an address or ZIP |
| doc_fee | number | Expected doc fee; leave out to assume the state's cap, or a typical $450 where there is none |
| buy_apr |
| number |
| A loan APR, to compare with buying |
| doc_fee | number | Doc fee when buying, for the estimated out-the-door; leave out to assume the state's cap, or a typical $450 where there is none |
| buy_down | number | Down payment when buying |
| tax_rate | number | Combined sales tax rate as a decimal (state and local); leave out to use the state's rate. A state lease tax (Pennsylvania's 3%) is added on top either way; Alabama's and West Virginia's own lease-payment rates replace their state sales rate; where the state taxes a lease once at the start (Texas, Ohio), this is that tax's rate and the payments carry none |
| lease_apr | number | The lease's rate as an APR, instead of the money factor |
| term_months* | integer | Lease term in months |
| money_factor | number | Money factor, e.g. 0.0025 |
| selling_price* | number | The negotiated price the lease is built on |
| due_at_signing | number | Cash down, lease rebates and trade equity that lower the price |
| buy_term_months | integer | Loan term, to compare with buying |
| disposition_fee | number | Turn-in fee at the end |
| buy_out_the_door | number | Out-the-door price when buying; leave out to estimate it |
| residual_percent* | number | Residual as a percent of MSRP (58 for 58%) |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"msrp",
"selling_price",
"residual_percent",
"term_months",
"state"
],
"properties": {
"city": {
"type": "string",
"pattern": "^[^\\r\\n]*$",
"maxLength": 60,
"minLength": 1,
"description": "City or county in the state's rate table (23 states; state_rules says which), like Pittsburgh or Allegheny County: sets the combined rate from the state's own rate file. Where a city is in several counties (Chicago, Milwaukee), give county too. A place name only, never an address or ZIP"
},
"fees": {
"type": "number",
"default": 0,
"maximum": 20000,
"minimum": 0,
"description": "Acquisition and other fees rolled into the lease"
},
"msrp": {
"type": "number",
"maximum": 1000000,
"minimum": 0,
"description": "MSRP (sticker price)"
},
"state": {
"enum": [
"AK",
"AL",
"AR",
"AZ",
"CA",
"CO",
"CT",
"DC",
"DE",
"FL",
"GA",
"HI",
"IA",
"ID",
"IL",
"IN",
"KS",
"KY",
"LA",
"MA",
"MD",
"ME",
"MI",
"MN",
"MO",
"MS",
"MT",
"NC",
"ND",
"NE",
"NH",
"NJ",
"NM",
"NV",
"NY",
"OH",
"OK",
"OR",
"PA",
"RI",
"SC",
"SD",
"TN",
"TX",
"UT",
"VA",
"VT",
"WA",
"WI",
"WV",
"WY"
],
"type": "string",
"description": "Two-letter state code (DC included), like PA"
},
"county": {
"type": "string",
"pattern": "^[^\\r\\n]*$",
"maxLength": 60,
"minLength": 1,
"description": "County from the state's list (Pennsylvania, Nevada, Wisconsin; state_rules lists them), like Allegheny County: sets the combined rate. A county name only, never an address or ZIP"
},
"buy_apr": {
"type": "number",
"maximum": 40,
"minimum": 0,
"description": "A loan APR, to compare with buying"
},
"doc_fee": {
"type": "number",
"maximum": 5000,
"minimum": 0,
"description": "Doc fee when buying, for the estimated out-the-door; leave out to assume the state's cap, or a typical $450 where there is none"
},
"buy_down": {
"type": "number",
"default": 0,
"maximum": 1000000,
"minimum": 0,
"description": "Down payment when buying"
},
"tax_rate": {
"type": "number",
"maximum": 0.25,
"minimum": 0,
"description": "Combined sales tax rate as a decimal (state and local); leave out to use the state's rate. A state lease tax (Pennsylvania's 3%) is added on top either way; Alabama's and West Virginia's own lease-payment rates replace their state sales rate; where the state taxes a lease once at the start (Texas, Ohio), this is that tax's rate and the payments carry none"
},
"lease_apr": {
"type": "number",
"maximum": 40,
"minimum": 0,
"description": "The lease's rate as an APR, instead of the money factor"
},
"term_months": {
"type": "integer",
"maximum": 60,
"minimum": 6,
"description": "Lease term in months"
},
"money_factor": {
"type": "number",
"maximum": 0.01,
"minimum": 0,
"description": "Money factor, e.g. 0.0025"
},
"selling_price": {
"type": "number",
"maximum": 1000000,
"minimum": 0,
"description": "The negotiated price the lease is built on"
},
"due_at_signing": {
"type": "number",
"default": 0,
"maximum": 1000000,
"minimum": 0,
"description": "Cash down, lease rebates and trade equity that lower the price"
},
"buy_term_months": {
"type": "integer",
"maximum": 120,
"minimum": 6,
"description": "Loan term, to compare with buying"
},
"disposition_fee": {
"type": "number",
"default": 0,
"maximum": 5000,
"minimum": 0,
"description": "Turn-in fee at the end"
},
"buy_out_the_door": {
"type": "number",
"maximum": 1000000,
"minimum": 0,
"description": "Out-the-door price when buying; leave out to estimate it"
},
"residual_percent": {
"type": "number",
"maximum": 95,
"minimum": 5,
"description": "Residual as a percent of MSRP (58 for 58%)"
}
}
}| array |
| doc_fee | number | Doc fee; leave out to assume the state's cap, or a typical $450 where there is none |
| rebates | number | Maker rebates taken off at signing |
| city_mpg | any | Washington DC only: the vehicle's EPA city MPG, with its weight |
| electric | any | Washington DC only: a battery-electric vehicle (its own, lower column) |
| tax_rate | number | Combined sales tax rate as a decimal; leave out to use the state's rate |
| condition | string | New or used: a state's tax can apply to new cars only (Oregon) |
| title_reg | number | Title and registration; leave out for a typical $250 |
| walk_line | number | The walk line, out the door |
| other_fees | number | Any other fees |
| term_months | integer | Loan term in months, for the payment |
| trade_offer | number | Best written trade-in offer |
| trade_payoff | number | What is still owed on the trade-in |
| buyer_in_chicago | any | Illinois only: the buyer's address is in the City of Chicago (the city and county given are the dealer's) |
| vehicle_weight_lbs | any | Washington DC only: the vehicle's unladen weight in pounds (DC's excise rate goes by weight and city MPG) |
| buyer_in_cook_county | any | Illinois only: the buyer's address is in Cook County |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"price",
"state"
],
"properties": {
"apr": {
"type": "number",
"maximum": 40,
"minimum": 0,
"description": "Loan APR in percent, for the payment"
},
"city": {
"type": "string",
"pattern": "^[^\\r\\n]*$",
"maxLength": 60,
"minLength": 1,
"description": "City or county in the state's rate table (23 states; state_rules says which), like Pittsburgh or Allegheny County: sets the combined rate from the state's own rate file. Where a city is in several counties (Chicago, Milwaukee), give county too. A place name only, never an address or ZIP"
},
"down": {
"type": "number",
"default": 0,
"maximum": 1000000,
"minimum": 0,
"description": "Cash down payment"
},
"price": {
"type": "number",
"maximum": 1000000,
"minimum": 0,
"description": "Vehicle selling price before rebates, fees and tax"
},
"state": {
"enum": [
"AK",
"AL",
"AR",
"AZ",
"CA",
"CO",
"CT",
"DC",
"DE",
"FL",
"GA",
"HI",
"IA",
"ID",
"IL",
"IN",
"KS",
"KY",
"LA",
"MA",
"MD",
"ME",
"MI",
"MN",
"MO",
"MS",
"MT",
"NC",
"ND",
"NE",
"NH",
"NJ",
"NM",
"NV",
"NY",
"OH",
"OK",
"OR",
"PA",
"RI",
"SC",
"SD",
"TN",
"TX",
"UT",
"VA",
"VT",
"WA",
"WI",
"WV",
"WY"
],
"type": "string",
"description": "Two-letter state code (DC included), like PA"
},
"county": {
"type": "string",
"pattern": "^[^\\r\\n]*$",
"maxLength": 60,
"minLength": 1,
"description": "County from the state's list (Pennsylvania, Nevada, Wisconsin; state_rules lists them), like Allegheny County: sets the combined rate. A county name only, never an address or ZIP"
},
"add_ons": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"amount"
],
"properties": {
"name": {
"type": "string",
"pattern": "^[^\\r\\n]*$",
"maxLength": 60,
"minLength": 1,
"description": "What the dealer calls the add-on"
},
"amount": {
"type": "number",
"maximum": 100000,
"minimum": 0,
"description": "Its price"
}
}
},
"default": [],
"maxItems": 12
},
"doc_fee": {
"type": "number",
"maximum": 5000,
"minimum": 0,
"description": "Doc fee; leave out to assume the state's cap, or a typical $450 where there is none"
},
"rebates": {
"type": "number",
"default": 0,
"maximum": 1000000,
"minimum": 0,
"description": "Maker rebates taken off at signing"
},
"city_mpg": {
"anyOf": [
{
"type": "number",
"maximum": 200,
"minimum": 1
},
{
"type": "string",
"pattern": "^\\d+(\\.\\d+)?$"
}
],
"description": "Washington DC only: the vehicle's EPA city MPG, with its weight"
},
"electric": {
"anyOf": [
{
"type": "boolean"
},
{
"enum": [
"true",
"false"
],
"type": "string"
}
],
"description": "Washington DC only: a battery-electric vehicle (its own, lower column)"
},
"tax_rate": {
"type": "number",
"maximum": 0.25,
"minimum": 0,
"description": "Combined sales tax rate as a decimal; leave out to use the state's rate"
},
"condition": {
"enum": [
"new",
"used"
],
"type": "string",
"default": "new",
"description": "New or used: a state's tax can apply to new cars only (Oregon)"
},
"title_reg": {
"type": "number",
"maximum": 10000,
"minimum": 0,
"description": "Title and registration; leave out for a typical $250"
},
"walk_line": {
"type": "number",
"maximum": 1000000,
"minimum": 0,
"description": "The walk line, out the door"
},
"other_fees": {
"type": "number",
"default": 0,
"maximum": 50000,
"minimum": 0,
"description": "Any other fees"
},
"term_months": {
"type": "integer",
"maximum": 120,
"minimum": 6,
"description": "Loan term in months, for the payment"
},
"trade_offer": {
"type": "number",
"default": 0,
"maximum": 1000000,
"minimum": 0,
"description": "Best written trade-in offer"
},
"trade_payoff": {
"type": "number",
"default": 0,
"maximum": 1000000,
"minimum": 0,
"description": "What is still owed on the trade-in"
},
"buyer_in_chicago": {
"anyOf": [
{
"type": "boolean"
},
{
"enum": [
"true",
"false"
],
"type": "string"
}
],
"description": "Illinois only: the buyer's address is in the City of Chicago (the city and county given are the dealer's)"
},
"vehicle_weight_lbs": {
"anyOf": [
{
"type": "integer",
"maximum": 20000,
"minimum": 500
},
{
"type": "string",
"pattern": "^\\d+(\\.\\d+)?$"
}
],
"description": "Washington DC only: the vehicle's unladen weight in pounds (DC's excise rate goes by weight and city MPG)"
},
"buyer_in_cook_county": {
"anyOf": [
{
"type": "boolean"
},
{
"enum": [
"true",
"false"
],
"type": "string"
}
],
"description": "Illinois only: the buyer's address is in Cook County"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"balance",
"apr",
"extra_monthly"
],
"properties": {
"apr": {
"type": "number",
"maximum": 40,
"minimum": 0,
"description": "The loan APR in percent"
},
"balance": {
"type": "number",
"maximum": 2000000,
"minimum": 0,
"description": "What is owed today"
},
"payment": {
"type": "number",
"maximum": 50000,
"minimum": 0,
"description": "The regular monthly payment; or give months_left instead"
},
"months_left": {
"type": "integer",
"maximum": 120,
"minimum": 1,
"description": "Payments left at the regular payment; or give payment instead"
},
"skip_months": {
"type": "array",
"items": {
"type": "integer",
"maximum": 1200,
"minimum": 1
},
"default": [],
"maxItems": 120,
"description": "Months (1 is the next payment) with nothing extra paid"
},
"extra_monthly": {
"type": "number",
"maximum": 50000,
"minimum": 0,
"description": "Extra paid toward principal each month"
},
"extra_for_months": {
"type": "integer",
"maximum": 1200,
"minimum": 0,
"description": "Pay the extra for only the first this-many months; leave out for every month"
}
}
}| own_apr* |
| number |
| Your own loan APR in percent (a pre-approval) |
| tax_rate | number |
| promo_apr* | number | The maker's special APR in percent |
| title_reg | number | Title and registration |
| promo_cash | number | Cash that combines with the special APR |
| term_months* | integer | Loan term in months |
| trade_offer | number | Trade-in offer |
| trade_payoff | number | Owed on the trade-in |
| vehicle_price | number | Vehicle price, to work out the amount financed instead |
| promo_term_months | integer | The special APR's longest term, if shorter |
| amount_financed_before_rebate | number | Out-the-door price before the rebate, less down payment and trade equity |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"rebate",
"own_apr",
"promo_apr",
"term_months",
"state"
],
"properties": {
"city": {
"type": "string",
"pattern": "^[^\\r\\n]*$",
"maxLength": 60,
"minLength": 1,
"description": "City or county in the state's rate table (23 states; state_rules says which), like Pittsburgh or Allegheny County: sets the combined rate from the state's own rate file. Where a city is in several counties (Chicago, Milwaukee), give county too. A place name only, never an address or ZIP"
},
"down": {
"type": "number",
"default": 0,
"maximum": 1000000,
"minimum": 0,
"description": "Cash down payment"
},
"state": {
"enum": [
"AK",
"AL",
"AR",
"AZ",
"CA",
"CO",
"CT",
"DC",
"DE",
"FL",
"GA",
"HI",
"IA",
"ID",
"IL",
"IN",
"KS",
"KY",
"LA",
"MA",
"MD",
"ME",
"MI",
"MN",
"MO",
"MS",
"MT",
"NC",
"ND",
"NE",
"NH",
"NJ",
"NM",
"NV",
"NY",
"OH",
"OK",
"OR",
"PA",
"RI",
"SC",
"SD",
"TN",
"TX",
"UT",
"VA",
"VT",
"WA",
"WI",
"WV",
"WY"
],
"type": "string",
"description": "Two-letter state code (DC included), like PA"
},
"county": {
"type": "string",
"pattern": "^[^\\r\\n]*$",
"maxLength": 60,
"minLength": 1,
"description": "County from the state's list (Pennsylvania, Nevada, Wisconsin; state_rules lists them), like Allegheny County: sets the combined rate. A county name only, never an address or ZIP"
},
"rebate": {
"type": "number",
"maximum": 100000,
"minimum": 0,
"description": "Cash rebate available with your own loan or cash"
},
"doc_fee": {
"type": "number",
"maximum": 5000,
"minimum": 0,
"description": "Doc fee; leave out to assume the state's cap, or a typical $450 where there is none"
},
"own_apr": {
"type": "number",
"maximum": 40,
"minimum": 0,
"description": "Your own loan APR in percent (a pre-approval)"
},
"tax_rate": {
"type": "number",
"maximum": 0.25,
"minimum": 0
},
"promo_apr": {
"type": "number",
"maximum": 40,
"minimum": 0,
"description": "The maker's special APR in percent"
},
"title_reg": {
"type": "number",
"maximum": 10000,
"minimum": 0,
"description": "Title and registration"
},
"promo_cash": {
"type": "number",
"default": 0,
"maximum": 100000,
"minimum": 0,
"description": "Cash that combines with the special APR"
},
"term_months": {
"type": "integer",
"maximum": 120,
"minimum": 6,
"description": "Loan term in months"
},
"trade_offer": {
"type": "number",
"default": 0,
"maximum": 1000000,
"minimum": 0,
"description": "Trade-in offer"
},
"trade_payoff": {
"type": "number",
"default": 0,
"maximum": 1000000,
"minimum": 0,
"description": "Owed on the trade-in"
},
"vehicle_price": {
"type": "number",
"maximum": 1000000,
"minimum": 0,
"description": "Vehicle price, to work out the amount financed instead"
},
"promo_term_months": {
"type": "integer",
"maximum": 120,
"minimum": 6,
"description": "The special APR's longest term, if shorter"
},
"amount_financed_before_rebate": {
"type": "number",
"maximum": 1000000,
"minimum": 0,
"description": "Out-the-door price before the rebate, less down payment and trade equity"
}
}
}| vehicle_price | number | The new vehicle price, for the tax the trade saves |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"offers"
],
"properties": {
"city": {
"type": "string",
"pattern": "^[^\\r\\n]*$",
"maxLength": 60,
"minLength": 1,
"description": "City or county in the state's rate table (23 states; state_rules says which), like Pittsburgh or Allegheny County: sets the combined rate from the state's own rate file. Where a city is in several counties (Chicago, Milwaukee), give county too. A place name only, never an address or ZIP"
},
"state": {
"enum": [
"AK",
"AL",
"AR",
"AZ",
"CA",
"CO",
"CT",
"DC",
"DE",
"FL",
"GA",
"HI",
"IA",
"ID",
"IL",
"IN",
"KS",
"KY",
"LA",
"MA",
"MD",
"ME",
"MI",
"MN",
"MO",
"MS",
"MT",
"NC",
"ND",
"NE",
"NH",
"NJ",
"NM",
"NV",
"NY",
"OH",
"OK",
"OR",
"PA",
"RI",
"SC",
"SD",
"TN",
"TX",
"UT",
"VA",
"VT",
"WA",
"WI",
"WV",
"WY"
],
"type": "string",
"description": "Two-letter state code (DC included), like PA"
},
"county": {
"type": "string",
"pattern": "^[^\\r\\n]*$",
"maxLength": 60,
"minLength": 1,
"description": "County from the state's list (Pennsylvania, Nevada, Wisconsin; state_rules lists them), like Allegheny County: sets the combined rate. A county name only, never an address or ZIP"
},
"offers": {
"type": "array",
"items": {
"type": "object",
"required": [
"source",
"amount"
],
"properties": {
"amount": {
"type": "number",
"maximum": 1000000,
"minimum": 0,
"description": "The offer"
},
"source": {
"type": "string",
"pattern": "^[^\\r\\n]*$",
"maxLength": 60,
"minLength": 1,
"description": "Who made the offer: CarMax, Carvana, a dealer. Never a person."
},
"expires": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Its last day, yyyy-mm-dd"
}
}
},
"maxItems": 6,
"minItems": 1
},
"payoff": {
"type": "number",
"default": 0,
"maximum": 1000000,
"minimum": 0,
"description": "What is still owed on the car"
},
"doc_fee": {
"type": "number",
"maximum": 5000,
"minimum": 0,
"description": "Doc fee; leave out to assume the state's cap, or a typical $450 where there is none"
},
"tax_rate": {
"type": "number",
"maximum": 0.25,
"minimum": 0,
"description": "Combined sales tax rate as a decimal, local tax included (0.07 for 7%); leave out to use the state's rate"
},
"vehicle_price": {
"type": "number",
"maximum": 1000000,
"minimum": 0,
"description": "The new vehicle price, for the tax the trade saves"
}
}
}| invoice | number | Dealer invoice, for a new car, if known |
| tax_rate | number | Combined sales tax rate as a decimal (0.08 for 8%); leave out to use the state's rate |
| condition | string |
| title_reg | number | Expected title and registration |
| fair_price | number | A fair vehicle price from research, before tax and fees |
| max_payment* | number | The highest monthly payment the person is comfortable with |
| term_months* | integer | Loan term in months |
| trade_offer | number | Best written trade-in offer, if any |
| trade_payoff | number | What is still owed on the trade-in |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"max_payment",
"apr",
"term_months",
"state"
],
"properties": {
"apr": {
"type": "number",
"maximum": 40,
"minimum": 0,
"description": "Loan APR in percent (6.49 means 6.49%); a pre-approval rate if they have one"
},
"city": {
"type": "string",
"pattern": "^[^\\r\\n]*$",
"maxLength": 60,
"minLength": 1,
"description": "City or county in the state's rate table (23 states; state_rules says which), like Pittsburgh or Allegheny County: sets the combined rate from the state's own rate file. Where a city is in several counties (Chicago, Milwaukee), give county too. A place name only, never an address or ZIP"
},
"down": {
"type": "number",
"default": 0,
"maximum": 1000000,
"minimum": 0,
"description": "Cash down payment"
},
"state": {
"enum": [
"AK",
"AL",
"AR",
"AZ",
"CA",
"CO",
"CT",
"DC",
"DE",
"FL",
"GA",
"HI",
"IA",
"ID",
"IL",
"IN",
"KS",
"KY",
"LA",
"MA",
"MD",
"ME",
"MI",
"MN",
"MO",
"MS",
"MT",
"NC",
"ND",
"NE",
"NH",
"NJ",
"NM",
"NV",
"NY",
"OH",
"OK",
"OR",
"PA",
"RI",
"SC",
"SD",
"TN",
"TX",
"UT",
"VA",
"VT",
"WA",
"WI",
"WV",
"WY"
],
"type": "string",
"description": "Two-letter state code (DC included), like PA"
},
"county": {
"type": "string",
"pattern": "^[^\\r\\n]*$",
"maxLength": 60,
"minLength": 1,
"description": "County from the state's list (Pennsylvania, Nevada, Wisconsin; state_rules lists them), like Allegheny County: sets the combined rate. A county name only, never an address or ZIP"
},
"doc_fee": {
"type": "number",
"maximum": 5000,
"minimum": 0,
"description": "Expected doc fee; leave out to assume the state's cap, or a typical $450 where there is none"
},
"invoice": {
"type": "number",
"maximum": 1000000,
"minimum": 0,
"description": "Dealer invoice, for a new car, if known"
},
"tax_rate": {
"type": "number",
"maximum": 0.25,
"minimum": 0,
"description": "Combined sales tax rate as a decimal (0.08 for 8%); leave out to use the state's rate"
},
"condition": {
"enum": [
"new",
"used"
],
"type": "string",
"default": "new"
},
"title_reg": {
"type": "number",
"maximum": 10000,
"minimum": 0,
"description": "Expected title and registration"
},
"fair_price": {
"type": "number",
"maximum": 1000000,
"minimum": 0,
"description": "A fair vehicle price from research, before tax and fees"
},
"max_payment": {
"type": "number",
"maximum": 20000,
"minimum": 0,
"description": "The highest monthly payment the person is comfortable with"
},
"term_months": {
"type": "integer",
"maximum": 120,
"minimum": 6,
"description": "Loan term in months"
},
"trade_offer": {
"type": "number",
"default": 0,
"maximum": 1000000,
"minimum": 0,
"description": "Best written trade-in offer, if any"
},
"trade_payoff": {
"type": "number",
"default": 0,
"maximum": 1000000,
"minimum": 0,
"description": "What is still owed on the trade-in"
}
}
}