docs.vin

infotainment

The infotainment noun — identity, lifecycle, events, and every capability as an anchored section: 14 capabilities, 2 live, 12 sandbox, 0 declared.

infotainment is one of the estate's 317 automotive nouns — a job a car needs done. It carries 14 capabilities: 2 live, 12 sandbox, 0 declared · doors aggregator.vin.

Identity

Nouninfotainment
PillarServices (facets: 4 data · 6 services · 4 commerce)
Capabilities14 — 2 live · 12 sandbox · 0 declared
EntitiesRepairOrder
Doorsaggregator.vin
SDKVin.infotainment.* from apis.vin
Address/catalog/infotainment#{action} — the anchor IS the wire name minus infotainment.

Events

The vocabulary this noun can append to the record — 12 past-tense, versioned event types, each linked to the capability that emits it:

Discover & read

spec

infotainment.spec · GET /infotainments/spec · gate none · live · answers InfotainmentSpec@1

FieldTypeRequiredNotes
vinstringno

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /1GKENPKS7TJ261420 (the VIN lens).

Try it — live: answers on the wire today. A sandbox key still selects the deterministic simulated mode — drive the full outcome range with the magic triggers.

the SDK — infotainment.spec
import { infotainment } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await infotainment.spec({"vin":"1GKENPKS7TJ261420"})
GET /infotainments/spec
curl 'https://apis.vin/infotainments/spec?vin=1GKENPKS7TJ261420'

featureLookup

infotainment.featureLookup · GET /infotainments/feature-lookup · gate none · live · answers InfotainmentFeatureLookup@1

FieldTypeRequiredNotes
vinstringno

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /1GKENPKS7TJ261420 (the VIN lens).

Try it — live: answers on the wire today. A sandbox key still selects the deterministic simulated mode — drive the full outcome range with the magic triggers.

the SDK — infotainment.featureLookup
import { infotainment } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await infotainment.featureLookup({"vin":"1GKENPKS7TJ261420"})
GET /infotainments/feature-lookup
curl 'https://apis.vin/infotainments/feature-lookup?vin=1GKENPKS7TJ261420'

mapVersionRead

infotainment.mapVersionRead · GET /infotainments/map-version-read · gate none · sandbox · answers InfotainmentMapVersionRead@1

FieldTypeRequiredNotes
vinstringno

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /1GKENPKS7TJ261420 (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.

the SDK — infotainment.mapVersionRead
import { infotainment } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await infotainment.mapVersionRead({"vin":"1GKENPKS7TJ261420"})
GET /infotainments/map-version-read
curl 'https://apis.vin/infotainments/map-version-read?vin=1GKENPKS7TJ261420'

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.

receipt · executed 2026-08-17T12:42:12.483Z · HTTP 200
{
  "type": "OK",
  "answers": "InfotainmentMapVersionRead@1",
  "value": {
    "vin": "1GKENPKS7TJ261420",
    "noun": "infotainment",
    "asOf": "2026-08-10",
    "map": {
      "version": "M-2025.4",
      "coverage": "north-america"
    }
  },
  "evidence": {
    "vin": "1GKENPKS7TJ261420",
    "noun": "infotainment",
    "asOf": "2026-08-10",
    "map": {
      "version": "M-2025.4",
      "coverage": "north-america"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "cabin-tech-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

versionCheck

infotainment.versionCheck · GET /infotainments/version-check · gate none · sandbox · answers InfotainmentVersionCheck@1

FieldTypeRequiredNotes
vinstringno

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /1GKENPKS7TJ261420 (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.

the SDK — infotainment.versionCheck
import { infotainment } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await infotainment.versionCheck({"vin":"1GKENPKS7TJ261420"})
GET /infotainments/version-check
curl 'https://apis.vin/infotainments/version-check?vin=1GKENPKS7TJ261420'

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.

receipt · executed 2026-08-17T12:42:12.517Z · HTTP 200
{
  "type": "OK",
  "answers": "InfotainmentVersionCheck@1",
  "value": {
    "vin": "1GKENPKS7TJ261420",
    "noun": "infotainment",
    "asOf": "2026-08-10",
    "version": {
      "installed": "3.6.1",
      "latest": "3.6.1",
      "current": true
    }
  },
  "evidence": {
    "vin": "1GKENPKS7TJ261420",
    "noun": "infotainment",
    "asOf": "2026-08-10",
    "version": {
      "installed": "3.6.1",
      "latest": "3.6.1",
      "current": true
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "cabin-tech-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Quote & price

quote

infotainment.quote · POST /infotainments/quote · gate offer · sandbox · answers InfotainmentQuote@1

FieldTypeRequiredNotes
vinstringno

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.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /1GKENPKS7TJ261420 (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.

EmitsInfotainment.quoted@1.

the SDK — infotainment.quote
import { infotainment } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await infotainment.quote({"vin":"1GKENPKS7TJ261420"})
POST /infotainments/quote
curl -X POST https://apis.vin/infotainments/quote \
  -H 'content-type: application/json' \
  -d '{"vin":"1GKENPKS7TJ261420"}'

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.

receipt · executed 2026-08-17T12:42:12.484Z · HTTP 200
{
  "type": "OK",
  "answers": "InfotainmentQuote@1",
  "value": {
    "vin": "1GKENPKS7TJ261420",
    "noun": "infotainment",
    "asOf": "2026-08-10",
    "quote": {
      "status": "no-work-indicated",
      "verdict": "pass",
      "amountCents": 0,
      "currency": "USD"
    }
  },
  "evidence": {
    "vin": "1GKENPKS7TJ261420",
    "noun": "infotainment",
    "asOf": "2026-08-10",
    "quote": {
      "status": "no-work-indicated",
      "verdict": "pass",
      "amountCents": 0,
      "currency": "USD"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "cabin-tech-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Apply & book

order

infotainment.order · POST /infotainments/order · gate offer · sandbox · answers InfotainmentOrder@1

FieldTypeRequiredNotes
vinstringno

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.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /1GKENPKS7TJ261420 (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.

EmitsInfotainment.ordered@1 · Order.placed@1 · ServiceOrder.settled@1.

the SDK — infotainment.order
import { infotainment } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await infotainment.order({"vin":"1GKENPKS7TJ261420"})
POST /infotainments/order
curl -X POST https://apis.vin/infotainments/order \
  -H 'content-type: application/json' \
  -d '{"vin":"1GKENPKS7TJ261420"}'

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.

receipt · executed 2026-08-17T12:42:12.483Z · HTTP 200
{
  "type": "OK",
  "answers": "InfotainmentOrder@1",
  "value": {
    "vin": "1GKENPKS7TJ261420",
    "noun": "infotainment",
    "asOf": "2026-08-10",
    "order": {
      "status": "nothing-to-order",
      "verdict": "pass"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "1GKENPKS7TJ261420",
    "noun": "infotainment",
    "asOf": "2026-08-10",
    "order": {
      "status": "nothing-to-order",
      "verdict": "pass"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "cabin-tech-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

subscribe

infotainment.subscribe · POST /infotainments/subscribe · gate offer · sandbox · answers InfotainmentSubscribe@1

FieldTypeRequiredNotes
vinstringno

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.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /1GKENPKS7TJ261420 (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.

EmitsInfotainment.subscribed@1.

the SDK — infotainment.subscribe
import { infotainment } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await infotainment.subscribe({"vin":"1GKENPKS7TJ261420"})
POST /infotainments/subscribe
curl -X POST https://apis.vin/infotainments/subscribe \
  -H 'content-type: application/json' \
  -d '{"vin":"1GKENPKS7TJ261420"}'

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.

receipt · executed 2026-08-17T12:42:12.503Z · HTTP 200
{
  "type": "OK",
  "answers": "InfotainmentSubscribe@1",
  "value": {
    "vin": "1GKENPKS7TJ261420",
    "noun": "infotainment",
    "asOf": "2026-08-10",
    "subscription": {
      "id": "IS-367f9915",
      "plan": "connected-services",
      "monthlyCents": 1900,
      "currency": "USD",
      "status": "pending-connection",
      "connection": "degraded"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "1GKENPKS7TJ261420",
    "noun": "infotainment",
    "asOf": "2026-08-10",
    "subscription": {
      "id": "IS-367f9915",
      "plan": "connected-services",
      "monthlyCents": 1900,
      "currency": "USD",
      "status": "pending-connection",
      "connection": "degraded"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "cabin-tech-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Pay & settle

pay

infotainment.pay · POST /infotainments/pay · gate offer · sandbox · answers InfotainmentPay@1

FieldTypeRequiredNotes
vinstringno

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.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /1GKENPKS7TJ261420 (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.

EmitsInfotainment.charged@1 · ServiceOrder.settled@1.

the SDK — infotainment.pay
import { infotainment } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await infotainment.pay({"vin":"1GKENPKS7TJ261420"})
POST /infotainments/pay
curl -X POST https://apis.vin/infotainments/pay \
  -H 'content-type: application/json' \
  -d '{"vin":"1GKENPKS7TJ261420"}'

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.

receipt · executed 2026-08-17T12:42:12.483Z · HTTP 200
{
  "type": "OK",
  "answers": "InfotainmentPay@1",
  "value": {
    "vin": "1GKENPKS7TJ261420",
    "noun": "infotainment",
    "asOf": "2026-08-10",
    "payment": {
      "status": "nothing-billed",
      "amountCents": 0,
      "currency": "USD"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "1GKENPKS7TJ261420",
    "noun": "infotainment",
    "asOf": "2026-08-10",
    "payment": {
      "status": "nothing-billed",
      "amountCents": 0,
      "currency": "USD"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "cabin-tech-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Fulfill & operate

update

infotainment.update · POST /infotainments/update · gate offer · sandbox · answers InfotainmentUpdate@1

FieldTypeRequiredNotes
vinstringno

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.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /1GKENPKS7TJ261420 (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.

EmitsInfotainment.updated@1.

the SDK — infotainment.update
import { infotainment } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await infotainment.update({"vin":"1GKENPKS7TJ261420"})
POST /infotainments/update
curl -X POST https://apis.vin/infotainments/update \
  -H 'content-type: application/json' \
  -d '{"vin":"1GKENPKS7TJ261420"}'

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.

receipt · executed 2026-08-17T12:42:12.516Z · HTTP 200
{
  "type": "OK",
  "answers": "InfotainmentUpdate@1",
  "value": {
    "vin": "1GKENPKS7TJ261420",
    "noun": "infotainment",
    "asOf": "2026-08-10",
    "update": {
      "status": "refused",
      "reason": "offline",
      "connection": "degraded"
    }
  },
  "evidence": {
    "vin": "1GKENPKS7TJ261420",
    "noun": "infotainment",
    "asOf": "2026-08-10",
    "update": {
      "status": "refused",
      "reason": "offline",
      "connection": "degraded"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "cabin-tech-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

moduleReplace

infotainment.moduleReplace · POST /infotainments/module-replace · gate offer · sandbox · answers InfotainmentModuleReplace@1

FieldTypeRequiredNotes
vinstringno

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.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /1GKENPKS7TJ261420 (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.

EmitsInfotainment.moduleReplaced@1.

the SDK — infotainment.moduleReplace
import { infotainment } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await infotainment.moduleReplace({"vin":"1GKENPKS7TJ261420"})
POST /infotainments/module-replace
curl -X POST https://apis.vin/infotainments/module-replace \
  -H 'content-type: application/json' \
  -d '{"vin":"1GKENPKS7TJ261420"}'

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.

receipt · executed 2026-08-17T12:42:12.483Z · HTTP 200
{
  "type": "OK",
  "answers": "InfotainmentModuleReplace@1",
  "value": {
    "vin": "1GKENPKS7TJ261420",
    "noun": "infotainment",
    "asOf": "2026-08-10",
    "replacement": {
      "status": "no-replacement-needed",
      "verdict": "pass"
    }
  },
  "evidence": {
    "vin": "1GKENPKS7TJ261420",
    "noun": "infotainment",
    "asOf": "2026-08-10",
    "replacement": {
      "status": "no-replacement-needed",
      "verdict": "pass"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "cabin-tech-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

mapUpdate

infotainment.mapUpdate · POST /infotainments/map-update · gate offer · sandbox · answers InfotainmentMapUpdate@1

FieldTypeRequiredNotes
vinstringno

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.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /1GKENPKS7TJ261420 (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.

EmitsInfotainment.mapUpdated@1.

the SDK — infotainment.mapUpdate
import { infotainment } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await infotainment.mapUpdate({"vin":"1GKENPKS7TJ261420"})
POST /infotainments/map-update
curl -X POST https://apis.vin/infotainments/map-update \
  -H 'content-type: application/json' \
  -d '{"vin":"1GKENPKS7TJ261420"}'

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.

receipt · executed 2026-08-17T12:42:12.478Z · HTTP 200
{
  "type": "OK",
  "answers": "InfotainmentMapUpdate@1",
  "value": {
    "vin": "1GKENPKS7TJ261420",
    "noun": "infotainment",
    "asOf": "2026-08-10",
    "mapUpdate": {
      "status": "queued-offline",
      "connection": "degraded",
      "fromVersion": "M-2025.4"
    }
  },
  "evidence": {
    "vin": "1GKENPKS7TJ261420",
    "noun": "infotainment",
    "asOf": "2026-08-10",
    "mapUpdate": {
      "status": "queued-offline",
      "connection": "degraded",
      "fromVersion": "M-2025.4"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "cabin-tech-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Lifecycle & state

reset

infotainment.reset · POST /infotainments/reset · gate offer · sandbox · answers InfotainmentReset@1

FieldTypeRequiredNotes
vinstringno

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.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /1GKENPKS7TJ261420 (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.

EmitsInfotainment.reset@1.

the SDK — infotainment.reset
import { infotainment } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await infotainment.reset({"vin":"1GKENPKS7TJ261420"})
POST /infotainments/reset
curl -X POST https://apis.vin/infotainments/reset \
  -H 'content-type: application/json' \
  -d '{"vin":"1GKENPKS7TJ261420"}'

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.

receipt · executed 2026-08-17T12:42:12.484Z · HTTP 200
{
  "type": "OK",
  "answers": "InfotainmentReset@1",
  "value": {
    "vin": "1GKENPKS7TJ261420",
    "noun": "infotainment",
    "asOf": "2026-08-10",
    "reset": {
      "status": "performed",
      "toVersion": "3.6.1",
      "verdict": "pass"
    }
  },
  "evidence": {
    "vin": "1GKENPKS7TJ261420",
    "noun": "infotainment",
    "asOf": "2026-08-10",
    "reset": {
      "status": "performed",
      "toVersion": "3.6.1",
      "verdict": "pass"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "cabin-tech-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

More actions

pairDevice

infotainment.pairDevice · POST /infotainments/pair-device · gate offer · sandbox · answers InfotainmentPairDevice@1

FieldTypeRequiredNotes
vinstringno

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.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /1GKENPKS7TJ261420 (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.

EmitsInfotainment.pairDeviced@1.

the SDK — infotainment.pairDevice
import { infotainment } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await infotainment.pairDevice({"vin":"1GKENPKS7TJ261420"})
POST /infotainments/pair-device
curl -X POST https://apis.vin/infotainments/pair-device \
  -H 'content-type: application/json' \
  -d '{"vin":"1GKENPKS7TJ261420"}'

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.

receipt · executed 2026-08-17T12:42:12.483Z · HTTP 200
{
  "type": "OK",
  "answers": "InfotainmentPairDevice@1",
  "value": {
    "vin": "1GKENPKS7TJ261420",
    "noun": "infotainment",
    "asOf": "2026-08-10",
    "pairing": {
      "deviceId": "BT-4bf5fdcb",
      "protocol": "bluetooth",
      "status": "paired"
    }
  },
  "evidence": {
    "vin": "1GKENPKS7TJ261420",
    "noun": "infotainment",
    "asOf": "2026-08-10",
    "pairing": {
      "deviceId": "BT-4bf5fdcb",
      "protocol": "bluetooth",
      "status": "paired"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "cabin-tech-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

reflash

infotainment.reflash · POST /infotainments/reflash · gate offer · sandbox · answers InfotainmentReflash@1

FieldTypeRequiredNotes
vinstringno

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.

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /1GKENPKS7TJ261420 (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.

EmitsInfotainment.reflashed@1.

the SDK — infotainment.reflash
import { infotainment } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await infotainment.reflash({"vin":"1GKENPKS7TJ261420"})
POST /infotainments/reflash
curl -X POST https://apis.vin/infotainments/reflash \
  -H 'content-type: application/json' \
  -d '{"vin":"1GKENPKS7TJ261420"}'

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.

receipt · executed 2026-08-17T12:42:12.484Z · HTTP 200
{
  "type": "OK",
  "answers": "InfotainmentReflash@1",
  "value": {
    "vin": "1GKENPKS7TJ261420",
    "noun": "infotainment",
    "asOf": "2026-08-10",
    "reflash": {
      "status": "not-indicated",
      "verdict": "pass",
      "version": "3.6.1"
    }
  },
  "evidence": {
    "vin": "1GKENPKS7TJ261420",
    "noun": "infotainment",
    "asOf": "2026-08-10",
    "reflash": {
      "status": "not-indicated",
      "verdict": "pass",
      "version": "3.6.1"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "cabin-tech-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.

RepairOrder


Generated from the catalog. Every capability, answer, gate, and entity on this page is a rendered descriptor — it cannot drift from the wire.