Skip to main content

Configurator Source

The Stellantis brand "Build & Price" sites (jeep.com, dodge.com, ramtrucks.com, chrysler.com, fiatusa.com, alfaromeousa.com) expose four public configurator APIs, fetched per trim (ccode + llp). They are implemented in projects/ai_stellantis/src/ai_stellantis/sources/configurator.py.

EndpointPurpose
CVDAll trims/configurations + base pricing for a model-year code (archival).
Equipment CategoriesFull ~350-option catalog with descriptions, standard flag, category hierarchy.
Catalog Option DetailsPer-option pricing, extended descriptions, associations, media.
ConfigureThe standard configuration state of each selectable option — the authority for is_configurable.

No credentials required; requests use browser-impersonating headers (random_headers()).

The state field — deciding is_configurable

The configure endpoint (/hostd/api/configure/EN/states/US/models/{ccode}/lowerLevelPackages/{llp}/configurations/standard) returns options grouped as options[categoryId][subCategoryId][optionKey]. Each option carries a state. Established by scanning ~33k options across all 6 brands (MY2023–2027):

statemeaningselectable?
Uunselected, freely-available add-onyes
Cunselected mutually-exclusive alternative (a priced swap for the standard sibling)yes
Runselected alternative gated by a combinations rule (jeep/dodge/ram only)yes
Sstandard equipment, selected — the fixed/standard configno
Gpackage-forced selection: on the build only because another selected option pulls it in (always prices.included=true, stateSetBy populated)no

Other useful signals: prices.included=true is the exclusive signature of S/G; locked is unused (always false in current data — do not key on it); content items (option.content[]) carry no state of their own.

The rule

A single option's flags cannot decide configurability. The standard default of a real choice and always-on standard equipment are byte-identical (state="S", standard=true, selected=true, onlyOne=true) — they differ only by whether the group offers an alternative. For example, on the Wrangler the engine group holds ERC (3.6L, state="S") and EC1 (state="C"), so the standard ERC is configurable; on the Grand Cherokee L the engine group holds only EC7 (state="S"), so it is not.

A top-level option is is_configurable iff its (categoryId, subCategoryId) group contains a member with state ∈ {U, C, R}. A group whose members are all S/G is fixed equipment. Every member of a configurable group — including its standard S/G default — is configurable.

There is intentionally no special-case for powertrain: a trim with a single engine (state="S", no alternative) is not configurable.

Content items (constituents listed under a package, e.g. the standard Quick Order Package) have no own state, so they inherit from the parent option: content of a selectable parent (state ∈ {U, C, R}) is configurable; content that exists only under fixed-standard parents (the standard QOP) is standard equipment. A content code that is also a configurable top-level option stays configurable.

This is why the Stellantis configure feed and the code_guides feed historically disagreed on many standard-equipment codes (Apple CarPlay, heated seats, etc.): the old extractor marked every top-level option and most package content configurable, while code_guides correctly treats standard equipment as non-configurable. The group-state rule aligns them.

The variation_id field — compound pair codes and tiebreaking

Each option in the configure response is identified by a variation_id. For most options this is a plain three-character code (e.g. PW7 for White Exterior Paint). For options that are defined as built-in pairings — combinations that the ordering system treats as a single unit — the API returns a hyphenated compound form: PW7-QW7 (White Paint + Glass Roof), PW7-QX8 (White Paint

  • Black Roof), etc.

The three-character form is the operationally significant one for the ordering system. The compound form is a configure-API artifact: the same PW7 option appears as a standalone code on trims where the roof is not paired, and as half of a compound code on trims where it is. The choice between PW7-QW7 and PW7-QX8 is arbitrary from a pipeline perspective — both encode the same PW7 base option, and the pairing half (roof finish) varies by trim configuration.

Because multiple configure API calls for the same option key may return different compound forms depending on query order or trim variant, the same logical option can show up as conflicting variation_id values across raw rows. The pipeline resolves this by tiebreaking on variation_id with strategy: min (lexicographic ascending), which produces a stable, deterministic choice without privileging any particular pairing.

invoice and msrp values on configure rows are considered unreliable and are overridden at the consolidation tier from more authoritative sources.

Future: resolving content items and missing data via href

Both top-level options and content items carry an href pointing to the catalog-option details endpoint:

# top-level option
"href": "https://www.jeep.com/hostd/api/catalog-option/EN/details/models/{ccode}/lowerLevelPackages/{llp}/options/{variation}"

# content item
"href": "https://www.jeep.com/hostd/api/catalog-option/EN/details/models/{ccode}/lowerLevelPackages/{llp}/options/{content_variation}"

Querying these hrefs would yield:

  • Full descriptions for content items not already captured by the equipment-categories source.
  • Prefixed codes — the catalog-option response includes a media.mackevision.image.code field that carries the prefixed form (e.g. *NL), making the prefix recoverable for content items without a parent lookup.
  • Prices for content items whose parent option does not propagate pricing.
  • Potentially other fields (associations, extended descriptions) not returned in the configure response itself.

This has not been implemented. The catalog-option source already fetches details for top-level options via a separate raw asset; extending it to cover content-item hrefs is the natural path and should be investigated before building any bespoke content-item resolution logic.