price_components field on each vehicle record.
Where it appears
Theprice_components field is available on every vehicle record returned by the Fetch Inventory endpoint. Top-level convenience fields final_price, total_discounts, and total_fees are also returned as flat fields on the vehicle object. starting_price is only available inside price_components.
Structure
price_components is a native JSON object:
The
type field reflects the most specific OEM-program classification we can detect from the dealer’s source data. A line labeled “Bonus Cash” may surface as incentive_bonus_cash (when the dealer’s HTML markup carries that program identifier) or as the more generic dealer_incentive (when it doesn’t). Both belong to category: "discount" — group on category for stable consumer logic.components items are exactly what the dealer’s website displays for this vehicle, in the same order.
Top-level summary fields
For dealers that include Documentation Fees AFTER the Final Price line (a common pattern for GM and Mercedes dealers),
final_price represents the price BEFORE Doc Fee. The Doc Fee then appears as a separate dealer_fee line. Out-the-door cost is final_price + total_fees for those dealers. Check the component order in components to confirm — it reflects the order shown on the dealer’s site.Component fields
Each item incomponents:
Component types
These are the types currently emitted in production data. Tolerate unknown types — your parser should treat any unrecognized type ascategory: "other". New providers may add new types over time.
Complementary offers are zero-dollar value-adds the dealer renders as a line item on the website (e.g., “Ewing Edge Program: Free”, “Window Tint: Free”, “First Year Maintenance: Free”). They have no math effect on the total but are surfaced because they appear on the dealer’s price stack.
amount is always 0 and label carries the offer name verbatim.Use
category for grouping logic — it’s stable across types. type may add new values as we integrate more providers.How the breakdown is captured
For CarsCommerce and DealerInspire dealers, AutosnapAI parses the dealer’s CMS-rendered HTML directly from the inventory feed. This means:- The
componentsarray reflects the dealer’s website pricing display — labels, amounts, and order shoppers see on the dealer’s website - No reconstruction or interpretation — we’re reading the dealer’s actual rendered output
- New incentive programs and rendering patterns are picked up automatically — no per-dealer rule updates needed
”Maybe-qualify” / conditional offers
Some breakdowns include disclosure-flagged incentives that do NOT auto-apply to the final price (e.g. Military Appreciation, College Graduate, Loyalty offers). These appear incomponents with "disclosure": "conditional":
Finance-conditional offers
Similar pattern for finance-only incentives (disclosure: "finance") — applies only when the customer finances through the dealer’s preferred lender (e.g. KFA Bonus Cash for Kia financing).
When no breakdown is available
Not every dealer publishes a structured pricing stack. When no breakdown is available — typically for vehicles gated behind “Please call for price” —components will be an empty array and the flat top-level final_price, total_discounts, total_fees will be null:
Taxes, registration, and title
Some dealers include registration fees, title fees, and other state-specific charges in their pricing breakdown asdealer_fee components (e.g. “Registration Fee”, “Computerized Vehicle Registration Fee”, “TEMPTAG”). Others do not. Sales tax is generally not included. The presence and labeling of these fees varies by dealer and state — check the individual component labels in components to determine what’s included for a given vehicle.
Related
Fetch Inventory
Retrieve vehicle records with pricing breakdowns
Vehicles
The full vehicle object shape
Provider Coverage
Per-provider breakdown coverage status
Webhooks
Event notifications for vehicle/price changes