TVM Source (Team Velocity)
Team Velocity builds dealer websites for several OEMs' franchise networks, and the
inventory API behind those sites is public. TVMInventoryRawComponent reads it for any OEM
whose dealers run the platform.
| asset | dealers |
|---|---|
stellantis/us/raw/tvm_dealer_listings | 177 |
mercedes/mbusa/raw/tvm_dealer_listings | 10 |
One component, one JSON file per OEM. The component is
ai_public.components.tvm.TVMInventoryRawComponent; the file is named by the
dealers_json attribute in that OEM's defs.yaml and sits beside it.
Credentials
None. No API key, no token, no session.
Adding an OEM or a dealer
The JSON is keyed by that OEM's own dealer code, so the raw rows join back to its dealer table without a crosswalk:
{
"05103": {
"account_id": 41460,
"campaign_id": 2599,
"domain": "https://www.mbofmodesto.com"
}
}
Adding a dealer means adding an entry. Adding an OEM means a defs.yaml pointing at a new
JSON file — no component change.
Dealer identifiers
AccountId is what scopes a request to a dealer: two accounts return disjoint VIN sets, and
an account returns its own vehicles regardless of the campaign paired with it.
Both ids are inlined in the page source of the dealer's own site, so a plain fetch of the homepage yields them:
curl -s --http2 -L --compressed -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" https://www.mbofmodesto.com/ | grep -oiE '(accountid|campaignid)\D{0,8}[0-9]{3,7}' | sort -u
This returned both ids for 8 of the 10 MBUSA dealers on one run. The other two answered
403 that day, having served the same ids from their homepage during an earlier sweep. A
403 means retry, not that the ids live elsewhere.
Origin is not enforced
The API returns identical results for a request whose Origin is:
- the dealer's real domain
- an OEM vanity domain
- a different dealer's domain
- a dealer of a different OEM
example.com- absent entirely
This was measured on both the VIN listing and the per-VIN detail endpoint, with the detail responses byte-identical.
domain therefore only populates the Origin and Referer headers, which the API ignores.
It reaches no URL, query parameter, or auth path. Populate it with the dealer's real site
anyway, so the file stays readable and stays correct if that changes.
CampaignId must be present but its value is ignored
Pairing an AccountId with another dealer's CampaignId returned that account's own
vehicle list unchanged across all 20 mismatched pairs tested. Omitting the parameter is a
different matter: three accounts whose correct pair returns 182, 582, and 561 vehicles each
returned 1 vehicle with CampaignId absent. The component always sends it, so this is a
constraint on hand-rolled probes rather than on the asset.
Volume
Two phases: one listing call per dealer, then one detail call per new VIN. One raw row per VIN per day.
Across the 10 MBUSA dealers the listing endpoint reported 1,944 new vehicles, so roughly 1,900 detail calls per daily partition. The Stellantis fan-out has not been measured.
OEM notes
MBUSA. Four of the 10 dealers — 05103, 05643, 05745, 28106 — are listed in the MBUSA
dealer API under an MBUSA *.mercedesdealer.com vanity host rather than their real domain.
The domain values in the JSON are the real sites those vanity hosts lead to. Which MBUSA
dealers run Team Velocity, and how that was determined, is recorded in
MBUSA Dealer Website Providers.