Skip to main content

lead.vehicle

A2A invocation

This skill is invoked through A2A's SendMessage operation (SendMessage JSON-RPC method or POST /message:send over HTTP+JSON), not a dedicated REST URL. The same payload travels on either A2A binding — see JSON-RPC binding or REST binding. AAP only defines what goes inside Message.parts[].data.

Consent gate: anonymous browsing on the left, ConsentGrant in the middle, consented lead on the right

The lead.vehicle skill submits a vehicle-specific inquiry. Its payload is designed to map losslessly onto ADF/XML so a dealer's existing CRM can ingest the lead without changes. The request MUST include at least one vehicle reference; when customer is present, consent MUST also be present and scope MUST include vehicle_inquiry.

PropertyValue
Skill idlead.vehicle
Request typelead.vehicle.request
Response typelead.vehicle.response
Anonymous allowedno
Consent requiredyes
ADF compatibleyes

For the field-by-field ADF/XML mapping, see ADF mapping.

Request shape

{
"type": "lead.vehicle.request",
"vehicles": [
{
"vin": "string (17 chars)",
"stock": "string",
"vehicle_id": "string",
"year": 0, "make": "string", "model": "string", "trim": "string",
"condition": "new | used | certified"
}
],
"intent": "buy | lease | trade_in | test_drive",
"finance_type": "cash | finance | lease",
"timeline": "asap | 1_3_months | 3_6_months | flexible",
"trade_in": { "year": 0, "make": "string", "model": "string", "mileage": 0 },
"message": "Free-text message from the user (max 4000 chars).",
"customer": { "...Customer..." },
"consent": { "...ConsentGrant... (required when customer is present)" },
"source_agent": "string",
"submitted_at": "ISO-8601"
}

Each vehicles[] entry MUST include at least one identifier (vin, stock, vehicle_id) or the year + make + model trio. additionalProperties: false on each vehicle entry.

FieldTypeRequiredNotes
typeconstyeslead.vehicle.request.
vehicles[]arrayyes (minItems: 1)At least one vehicle reference.
intentenumnobuy, lease, trade_in, or test_drive. Maps to ADF <vehicle interest> attribute.
finance_typeenumnocash, finance, or lease. Maps to ADF <finance><method>.
timelineenumnoasap, 1_3_months, 3_6_months, flexible.
trade_inobjectnoOptional trade-in vehicle details.
messagestringnoFree-text message from the user.
customerCustomernoWhen present, consent MUST also be present.
consentConsentGrantconditionalRequired when customer is present. scope MUST include vehicle_inquiry.
source_agentstringyesBuyer agent identifier.
submitted_atdate-timenoMaps to ADF <requestdate>.

Response shape

lead.vehicle shares the LeadResponse envelope with lead.general.

{
"type": "lead.vehicle.response",
"data": {
"lead_id": "string",
"status": "received | duplicate | rejected",
"dealer": { "name": "string", "phone": "+1XXXXXXXXXX" }
},
"message": "Optional contextual note."
}

status semantics are the same as lead.general. Repeated leads for the same customer + vehicle SHOULD return duplicate.

Full example

A user submits a lead on a specific Civic by VIN, intends to buy, prefers financing, and authorizes email + phone follow-up.

Request

{
"type": "lead.vehicle.request",
"vehicles": [
{
"vin": "1HGCV1F30KA000001",
"year": 2022,
"make": "Honda",
"model": "Civic",
"trim": "EX",
"condition": "certified"
}
],
"intent": "buy",
"finance_type": "finance",
"timeline": "1_3_months",
"trade_in": {
"year": 2014,
"make": "Toyota",
"model": "Corolla",
"mileage": 96000
},
"message": "Interested in this Civic; can you confirm availability and best price with my trade?",
"customer": {
"first_name": "Anna",
"last_name": "Lee",
"email": "anna@example.com",
"phone": "+14155550123",
"preferred_contact": "email",
"address": {
"line1": "200 Folsom St",
"city": "San Francisco",
"region_code": "CA",
"postal_code": "94105",
"country_code": "US"
}
},
"consent": {
"granted_at": "2026-04-30T10:15:00Z",
"allowed_channels": ["email", "phone"],
"consent_text": "I agree to share my contact info with Demo Toyota about this 2022 Honda Civic.",
"source_agent": "chatgpt-shopping",
"scope": ["vehicle_inquiry"]
},
"source_agent": "chatgpt-shopping",
"submitted_at": "2026-04-30T10:15:10Z"
}

Response

{
"type": "lead.vehicle.response",
"data": {
"lead_id": "lead_2026_04_30_anna_002",
"status": "received",
"dealer": {
"name": "Demo Toyota",
"phone": "+14155550100"
}
},
"message": "A sales associate will reach out to Anna within 30 minutes."
}

Vehicle-by-trio variant (no VIN/stock/vehicle_id)

When the user is interested in a model the dealer does not yet have in stock, the buyer agent MAY submit by year + make + model (no individual identifier):

{
"type": "lead.vehicle.request",
"vehicles": [
{ "year": 2024, "make": "Toyota", "model": "RAV4", "trim": "Hybrid XLE" }
],
"intent": "buy",
"source_agent": "chatgpt-shopping"
}

ADF mapping

Every lead.vehicle request maps to an ADF/XML payload. The buyer agent does not generate the XML — the dealer agent or the dealer's CRM does. AAP guarantees the data is sufficient. See ADF mapping for the full field-by-field translation table.