connectedCar
The connectedCar noun — identity, lifecycle, events, and every capability as an anchored section: 15 capabilities, 0 live, 15 sandbox, 0 declared.
connectedCar is one of the estate's 317 automotive nouns — a job a car needs done. It carries 15 capabilities: 0 live, 15 sandbox, 0 declared · doors aggregator.vin.
Identity
| Noun | connectedCar |
| Pillar | Data (facets: 7 data · 6 services · 2 commerce) |
| Capabilities | 15 — 0 live · 15 sandbox · 0 declared |
| Entities | Connection |
| Doors | aggregator.vin |
| SDK | Vin.connectedCar.* from apis.vin |
| Address | /catalog/connectedCar#{action} — the anchor IS the wire name minus connectedCar. |
Events
The vocabulary this noun can append to the record — 10 past-tense, versioned event types, each linked to the capability that emits it:
ConnectedCar.commandSent@1— emitted bycommandConnectedCar.consentCaptured@1— emitted byconsentConnectedCar.dataSubscribed@1— emitted bydataSubscribeConnectedCar.deprovisioned@1— emitted bydeprovisionConnectedCar.enrolled@1— emitted byenrollConnectedCar.failed@1— emitted bydataSubscribe·usagePayConnectedCar.provisioned@1— emitted byprovisionConnectedCar.requested@1— emitted bycommand·streamConnectedCar.streamed@1— emitted bystreamConnectedCar.usagePaid@1— emitted byusagePay
Discover & read
read
connectedCar.read · GET /connected-cars/read · gate none · sandbox · answers ConnectedCarRead@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3VW547AU8HM038523 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
import { connectedCar } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await connectedCar.read({"vin":"3VW547AU8HM038523"})curl 'https://apis.vin/connected-cars/read?vin=3VW547AU8HM038523'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ConnectedCarRead@1",
"value": {
"vin": "3VW547AU8HM038523",
"noun": "connectedCar",
"asOf": "2026-08-10",
"connection": "active",
"verdict": "pass",
"channels": [
"location",
"odometer",
"battery",
"diagnostics"
],
"freshness": "live"
},
"evidence": {
"vin": "3VW547AU8HM038523",
"noun": "connectedCar",
"asOf": "2026-08-10",
"connection": "active",
"verdict": "pass",
"channels": [
"location",
"odometer",
"battery",
"diagnostics"
],
"freshness": "live"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "charge-connect-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}decode
connectedCar.decode · GET /connected-cars/decode · gate none · sandbox · answers ConnectedCarDecode@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3VW547AU8HM038523 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
import { connectedCar } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await connectedCar.decode({"vin":"3VW547AU8HM038523"})curl 'https://apis.vin/connected-cars/decode?vin=3VW547AU8HM038523'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ConnectedCarDecode@1",
"value": {
"vin": "3VW547AU8HM038523",
"noun": "connectedCar",
"asOf": "2026-08-10",
"connection": "active",
"decoded": {
"vin": "3VW547AU8HM038523",
"valid": true,
"squishVin": "3VW547AU8HM"
}
},
"evidence": {
"vin": "3VW547AU8HM038523",
"noun": "connectedCar",
"asOf": "2026-08-10",
"connection": "active",
"decoded": {
"vin": "3VW547AU8HM038523",
"valid": true,
"squishVin": "3VW547AU8HM"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "charge-connect-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}location
connectedCar.location · GET /connected-cars/location · gate key · sandbox · answers ConnectedCarLocation@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3VW547AU8HM038523 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
import { connectedCar } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await connectedCar.location({"vin":"3VW547AU8HM038523"})curl 'https://apis.vin/connected-cars/location?vin=3VW547AU8HM038523'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ConnectedCarLocation@1",
"value": {
"vin": "3VW547AU8HM038523",
"noun": "connectedCar",
"asOf": "2026-08-10",
"connection": "active",
"position": {
"latE5": 3779114,
"lonE5": -12239044
}
},
"evidence": {
"vin": "3VW547AU8HM038523",
"noun": "connectedCar",
"asOf": "2026-08-10",
"connection": "active",
"position": {
"latE5": 3779114,
"lonE5": -12239044
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "charge-connect-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}tripHistory
connectedCar.tripHistory · GET /connected-cars/trip-history · gate key · sandbox · answers ConnectedCarTripHistory@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3VW547AU8HM038523 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
import { connectedCar } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await connectedCar.tripHistory({"vin":"3VW547AU8HM038523"})curl 'https://apis.vin/connected-cars/trip-history?vin=3VW547AU8HM038523'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ConnectedCarTripHistory@1",
"value": {
"vin": "3VW547AU8HM038523",
"noun": "connectedCar",
"asOf": "2026-08-10",
"connection": "active",
"trips": 15,
"totalMiles": 786,
"windowDays": 30
},
"evidence": {
"vin": "3VW547AU8HM038523",
"noun": "connectedCar",
"asOf": "2026-08-10",
"connection": "active",
"trips": 15,
"totalMiles": 786,
"windowDays": 30
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "charge-connect-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Apply & book
enroll
connectedCar.enroll · POST /connected-cars/enroll · gate offer · sandbox · answers ConnectedCarEnroll@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3VW547AU8HM038523 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — ConnectedCar.enrolled@1.
import { connectedCar } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await connectedCar.enroll({"vin":"3VW547AU8HM038523"})curl -X POST https://apis.vin/connected-cars/enroll \
-H 'content-type: application/json' \
-d '{"vin":"3VW547AU8HM038523"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ConnectedCarEnroll@1",
"value": {
"vin": "3VW547AU8HM038523",
"noun": "connectedCar",
"asOf": "2026-08-10",
"connection": "active",
"command": {
"id": "CMD-2da119f2",
"name": "enroll",
"status": "executed"
}
},
"evidence": {
"vin": "3VW547AU8HM038523",
"noun": "connectedCar",
"asOf": "2026-08-10",
"connection": "active",
"command": {
"id": "CMD-2da119f2",
"name": "enroll",
"status": "executed"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "charge-connect-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}provision
connectedCar.provision · POST /connected-cars/provision · gate offer · sandbox · answers ConnectedCarProvision@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3VW547AU8HM038523 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — ConnectedCar.provisioned@1.
import { connectedCar } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await connectedCar.provision({"vin":"3VW547AU8HM038523"})curl -X POST https://apis.vin/connected-cars/provision \
-H 'content-type: application/json' \
-d '{"vin":"3VW547AU8HM038523"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ConnectedCarProvision@1",
"value": {
"vin": "3VW547AU8HM038523",
"noun": "connectedCar",
"asOf": "2026-08-10",
"connection": "active",
"command": {
"id": "CMD-cd9b5aa5",
"name": "provision",
"status": "executed"
}
},
"evidence": {
"vin": "3VW547AU8HM038523",
"noun": "connectedCar",
"asOf": "2026-08-10",
"connection": "active",
"command": {
"id": "CMD-cd9b5aa5",
"name": "provision",
"status": "executed"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "charge-connect-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}dataSubscribe
connectedCar.dataSubscribe · POST /connected-cars/data-subscribe · gate offer · sandbox · answers ConnectedCarDataSubscribe@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3VW547AU8HM038523 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — ConnectedCar.dataSubscribed@1 · ConnectedCar.failed@1.
import { connectedCar } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await connectedCar.dataSubscribe({"vin":"3VW547AU8HM038523"})curl -X POST https://apis.vin/connected-cars/data-subscribe \
-H 'content-type: application/json' \
-d '{"vin":"3VW547AU8HM038523"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ConnectedCarDataSubscribe@1",
"value": {
"vin": "3VW547AU8HM038523",
"noun": "connectedCar",
"asOf": "2026-08-10",
"connection": "active",
"command": {
"id": "CMD-267f118e",
"name": "dataSubscribe",
"status": "executed"
}
},
"evidence": {
"vin": "3VW547AU8HM038523",
"noun": "connectedCar",
"asOf": "2026-08-10",
"connection": "active",
"command": {
"id": "CMD-267f118e",
"name": "dataSubscribe",
"status": "executed"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "charge-connect-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}deprovision
connectedCar.deprovision · POST /connected-cars/deprovision · gate offer · sandbox · answers ConnectedCarDeprovision@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3VW547AU8HM038523 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — ConnectedCar.deprovisioned@1.
import { connectedCar } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await connectedCar.deprovision({"vin":"3VW547AU8HM038523"})curl -X POST https://apis.vin/connected-cars/deprovision \
-H 'content-type: application/json' \
-d '{"vin":"3VW547AU8HM038523"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ConnectedCarDeprovision@1",
"value": {
"vin": "3VW547AU8HM038523",
"noun": "connectedCar",
"asOf": "2026-08-10",
"connection": "active",
"command": {
"id": "CMD-8f06f1b0",
"name": "deprovision",
"status": "executed"
}
},
"evidence": {
"vin": "3VW547AU8HM038523",
"noun": "connectedCar",
"asOf": "2026-08-10",
"connection": "active",
"command": {
"id": "CMD-8f06f1b0",
"name": "deprovision",
"status": "executed"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "charge-connect-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Pay & settle
usagePay
connectedCar.usagePay · POST /connected-cars/usage-pay · gate offer · sandbox · answers ConnectedCarUsagePay@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3VW547AU8HM038523 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — ConnectedCar.failed@1 · ConnectedCar.usagePaid@1.
import { connectedCar } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await connectedCar.usagePay({"vin":"3VW547AU8HM038523"})curl -X POST https://apis.vin/connected-cars/usage-pay \
-H 'content-type: application/json' \
-d '{"vin":"3VW547AU8HM038523"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ConnectedCarUsagePay@1",
"value": {
"vin": "3VW547AU8HM038523",
"noun": "connectedCar",
"asOf": "2026-08-10",
"connection": "active",
"payment": {
"id": "PAY-279fccc1",
"status": "settled",
"amountCents": 2400,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "3VW547AU8HM038523",
"noun": "connectedCar",
"asOf": "2026-08-10",
"connection": "active",
"payment": {
"id": "PAY-279fccc1",
"status": "settled",
"amountCents": 2400,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "charge-connect-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Authorize & resolve
consent
connectedCar.consent · POST /connected-cars/consent · gate offer · sandbox · answers ConnectedCarConsent@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3VW547AU8HM038523 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — ConnectedCar.consentCaptured@1.
import { connectedCar } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await connectedCar.consent({"vin":"3VW547AU8HM038523"})curl -X POST https://apis.vin/connected-cars/consent \
-H 'content-type: application/json' \
-d '{"vin":"3VW547AU8HM038523"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ConnectedCarConsent@1",
"value": {
"vin": "3VW547AU8HM038523",
"noun": "connectedCar",
"asOf": "2026-08-10",
"connection": "active",
"consent": {
"id": "CNS-4a0862a4",
"scope": [
"telemetry",
"location",
"diagnostics"
],
"status": "recorded"
}
},
"evidence": {
"vin": "3VW547AU8HM038523",
"noun": "connectedCar",
"asOf": "2026-08-10",
"connection": "active",
"consent": {
"id": "CNS-4a0862a4",
"scope": [
"telemetry",
"location",
"diagnostics"
],
"status": "recorded"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "charge-connect-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}More actions
command
connectedCar.command · POST /connected-cars/command · gate offer · sandbox · answers ConnectedCarCommand@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3VW547AU8HM038523 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — ConnectedCar.commandSent@1 · ConnectedCar.requested@1.
import { connectedCar } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await connectedCar.command({"vin":"3VW547AU8HM038523"})curl -X POST https://apis.vin/connected-cars/command \
-H 'content-type: application/json' \
-d '{"vin":"3VW547AU8HM038523"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ConnectedCarCommand@1",
"value": {
"vin": "3VW547AU8HM038523",
"noun": "connectedCar",
"asOf": "2026-08-10",
"connection": "active",
"command": {
"id": "CMD-bfec3b83",
"name": "remote-command",
"status": "executed"
}
},
"evidence": {
"vin": "3VW547AU8HM038523",
"noun": "connectedCar",
"asOf": "2026-08-10",
"connection": "active",
"command": {
"id": "CMD-bfec3b83",
"name": "remote-command",
"status": "executed"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "charge-connect-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}driverBehavior
connectedCar.driverBehavior · GET /connected-cars/driver-behavior · gate key · sandbox · answers ConnectedCarDriverBehavior@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3VW547AU8HM038523 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
import { connectedCar } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await connectedCar.driverBehavior({"vin":"3VW547AU8HM038523"})curl 'https://apis.vin/connected-cars/driver-behavior?vin=3VW547AU8HM038523'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ConnectedCarDriverBehavior@1",
"value": {
"vin": "3VW547AU8HM038523",
"noun": "connectedCar",
"asOf": "2026-08-10",
"connection": "active",
"verdict": "pass",
"behaviorScore": 98
},
"evidence": {
"vin": "3VW547AU8HM038523",
"noun": "connectedCar",
"asOf": "2026-08-10",
"connection": "active",
"verdict": "pass",
"behaviorScore": 98
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "charge-connect-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}dtc
connectedCar.dtc · GET /connected-cars/dtc · gate key · sandbox · answers ConnectedCarDtc@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3VW547AU8HM038523 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
import { connectedCar } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await connectedCar.dtc({"vin":"3VW547AU8HM038523"})curl 'https://apis.vin/connected-cars/dtc?vin=3VW547AU8HM038523'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ConnectedCarDtc@1",
"value": {
"vin": "3VW547AU8HM038523",
"noun": "connectedCar",
"asOf": "2026-08-10",
"connection": "active",
"dtc": {
"verdict": "attention",
"codes": [
{
"code": "P0217",
"description": "engine overtemperature condition",
"system": "cooling",
"status": "pending"
},
{
"code": "P0562",
"description": "system voltage low",
"system": "electrical",
"status": "pending"
}
]
}
},
"evidence": {
"vin": "3VW547AU8HM038523",
"noun": "connectedCar",
"asOf": "2026-08-10",
"connection": "active",
"dtc": {
"verdict": "attention",
"codes": [
{
"code": "P0217",
"description": "engine overtemperature condition",
"system": "cooling",
"status": "pending"
},
{
"code": "P0562",
"description": "system voltage low",
"system": "electrical",
"status": "pending"
}
]
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "charge-connect-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}health
connectedCar.health · GET /connected-cars/health · gate key · sandbox · answers ConnectedCarHealth@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3VW547AU8HM038523 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
import { connectedCar } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await connectedCar.health({"vin":"3VW547AU8HM038523"})curl 'https://apis.vin/connected-cars/health?vin=3VW547AU8HM038523'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ConnectedCarHealth@1",
"value": {
"vin": "3VW547AU8HM038523",
"noun": "connectedCar",
"asOf": "2026-08-10",
"connection": "active",
"verdict": "pass",
"findings": []
},
"evidence": {
"vin": "3VW547AU8HM038523",
"noun": "connectedCar",
"asOf": "2026-08-10",
"connection": "active",
"verdict": "pass",
"findings": []
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "charge-connect-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}stream
connectedCar.stream · POST /connected-cars/stream · gate offer · sandbox · answers ConnectedCarStream@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /3VW547AU8HM038523 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — ConnectedCar.requested@1 · ConnectedCar.streamed@1.
import { connectedCar } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await connectedCar.stream({"vin":"3VW547AU8HM038523"})curl -X POST https://apis.vin/connected-cars/stream \
-H 'content-type: application/json' \
-d '{"vin":"3VW547AU8HM038523"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ConnectedCarStream@1",
"value": {
"vin": "3VW547AU8HM038523",
"noun": "connectedCar",
"asOf": "2026-08-10",
"connection": "active",
"verdict": "pass",
"channels": [
"location",
"odometer",
"battery",
"diagnostics"
],
"freshness": "live"
},
"evidence": {
"vin": "3VW547AU8HM038523",
"noun": "connectedCar",
"asOf": "2026-08-10",
"connection": "active",
"verdict": "pass",
"channels": [
"location",
"odometer",
"battery",
"diagnostics"
],
"freshness": "live"
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "charge-connect-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Data model
The record shape behind this noun — one entity, each property an evidence field. See the whole estate model on the data model page.
Connection
Modeled
The noun drawn out — its record shape, its lifecycle, and how it is exercised end to end. One diagram, rendered from the estate model.
ConnectedCar · Class model
Generated from the catalog. Every capability, answer, gate, and entity on this page is a rendered descriptor — it cannot drift from the wire.
conditionReport
The conditionReport noun — identity, lifecycle, events, and every capability as an anchored section: 23 capabilities, 0 live, 23 sandbox, 0 declared.
consumables
The consumables noun — identity, lifecycle, events, and every capability as an anchored section: 11 capabilities, 0 live, 11 sandbox, 0 declared.