docs.vin

lighting

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

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

Identity

Nounlighting
PillarServices (facets: 4 data · 5 services · 3 commerce)
Capabilities12 — 0 live · 12 sandbox · 0 declared
EntitiesRepairOrder
Doorsaggregator.vin
SDKVin.lighting.* from apis.vin
Address/catalog/lighting#{action} — the anchor IS the wire name minus lighting.

Events

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

Discover & read

spec

lighting.spec · GET /lightings/spec · gate none · sandbox · answers LightingSpec@1

FieldTypeRequiredNotes
vinstringno

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /1HGCV1F32NA078529 (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 — lighting.spec
import { lighting } from 'apis.vin'

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

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:13.676Z · HTTP 200
{
  "type": "OK",
  "answers": "LightingSpec@1",
  "value": {
    "vin": "1HGCV1F32NA078529",
    "noun": "lighting",
    "asOf": "2026-08-10",
    "roId": "RO-2fbeff18",
    "spec": {
      "lowBeam": "LED projector",
      "highBeam": "LED reflector",
      "bulbCode": "H11-class",
      "aimSpecDeg": -0.6,
      "dotCompliant": true
    },
    "fits": true
  },
  "evidence": {
    "vin": "1HGCV1F32NA078529",
    "noun": "lighting",
    "asOf": "2026-08-10",
    "roId": "RO-2fbeff18",
    "spec": {
      "lowBeam": "LED projector",
      "highBeam": "LED reflector",
      "bulbCode": "H11-class",
      "aimSpecDeg": -0.6,
      "dotCompliant": true
    },
    "fits": true
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "shop-satellites-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

fitment

lighting.fitment · GET /lightings/fitment · gate none · sandbox · answers LightingFitment@1

FieldTypeRequiredNotes
vinstringno

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /1HGCV1F32NA078529 (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 — lighting.fitment
import { lighting } from 'apis.vin'

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

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:13.643Z · HTTP 200
{
  "type": "OK",
  "answers": "LightingFitment@1",
  "value": {
    "vin": "1HGCV1F32NA078529",
    "noun": "lighting",
    "asOf": "2026-08-10",
    "roId": "RO-2fbeff18",
    "spec": {
      "lowBeam": "LED projector",
      "highBeam": "LED reflector",
      "bulbCode": "H11-class",
      "aimSpecDeg": -0.6,
      "dotCompliant": true
    },
    "fits": true
  },
  "evidence": {
    "vin": "1HGCV1F32NA078529",
    "noun": "lighting",
    "asOf": "2026-08-10",
    "roId": "RO-2fbeff18",
    "spec": {
      "lowBeam": "LED projector",
      "highBeam": "LED reflector",
      "bulbCode": "H11-class",
      "aimSpecDeg": -0.6,
      "dotCompliant": true
    },
    "fits": true
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "shop-satellites-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

aimRead

lighting.aimRead · GET /lightings/aim-read · gate none · sandbox · answers LightingAimRead@1

FieldTypeRequiredNotes
vinstringno

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /1HGCV1F32NA078529 (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 — lighting.aimRead
import { lighting } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lighting.aimRead({"vin":"1HGCV1F32NA078529"})
GET /lightings/aim-read
curl 'https://apis.vin/lightings/aim-read?vin=1HGCV1F32NA078529'

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:13.640Z · HTTP 200
{
  "type": "OK",
  "answers": "LightingAimRead@1",
  "value": {
    "vin": "1HGCV1F32NA078529",
    "noun": "lighting",
    "asOf": "2026-08-10",
    "roId": "RO-2fbeff18",
    "aim": {
      "status": "measured",
      "measuredDeg": -0.6,
      "specDeg": -0.6,
      "withinSpec": true
    }
  },
  "evidence": {
    "vin": "1HGCV1F32NA078529",
    "noun": "lighting",
    "asOf": "2026-08-10",
    "roId": "RO-2fbeff18",
    "aim": {
      "status": "measured",
      "measuredDeg": -0.6,
      "specDeg": -0.6,
      "withinSpec": true
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "shop-satellites-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

outageCheck

lighting.outageCheck · GET /lightings/outage-check · gate none · sandbox · answers LightingOutageCheck@1

FieldTypeRequiredNotes
vinstringno

Dooraggregator.vin serves this noun on its two routes: / (the landing) · /1HGCV1F32NA078529 (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 — lighting.outageCheck
import { lighting } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await lighting.outageCheck({"vin":"1HGCV1F32NA078529"})
GET /lightings/outage-check
curl 'https://apis.vin/lightings/outage-check?vin=1HGCV1F32NA078529'

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:13.649Z · HTTP 200
{
  "type": "OK",
  "answers": "LightingOutageCheck@1",
  "value": {
    "vin": "1HGCV1F32NA078529",
    "noun": "lighting",
    "asOf": "2026-08-10",
    "roId": "RO-2fbeff18",
    "outage": {
      "verdict": "pass",
      "status": "all-lamps-functional",
      "faults": []
    }
  },
  "evidence": {
    "vin": "1HGCV1F32NA078529",
    "noun": "lighting",
    "asOf": "2026-08-10",
    "roId": "RO-2fbeff18",
    "outage": {
      "verdict": "pass",
      "status": "all-lamps-functional",
      "faults": []
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "shop-satellites-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Quote & price

quote

lighting.quote · POST /lightings/quote · gate offer · sandbox · answers LightingQuote@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) · /1HGCV1F32NA078529 (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.

EmitsLighting.quoted@1.

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

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

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:13.676Z · HTTP 200
{
  "type": "OK",
  "answers": "LightingQuote@1",
  "value": {
    "vin": "1HGCV1F32NA078529",
    "noun": "lighting",
    "asOf": "2026-08-10",
    "roId": "RO-2fbeff18",
    "quote": {
      "id": "LQ-4049b3bc",
      "verdict": "pass",
      "amountCents": 8900,
      "currency": "USD",
      "status": "quoted"
    }
  },
  "evidence": {
    "vin": "1HGCV1F32NA078529",
    "noun": "lighting",
    "asOf": "2026-08-10",
    "roId": "RO-2fbeff18",
    "quote": {
      "id": "LQ-4049b3bc",
      "verdict": "pass",
      "amountCents": 8900,
      "currency": "USD",
      "status": "quoted"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "shop-satellites-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Apply & book

order

lighting.order · POST /lightings/order · gate offer · sandbox · answers LightingOrder@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) · /1HGCV1F32NA078529 (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.

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

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

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

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:13.645Z · HTTP 200
{
  "type": "OK",
  "answers": "LightingOrder@1",
  "value": {
    "vin": "1HGCV1F32NA078529",
    "noun": "lighting",
    "asOf": "2026-08-10",
    "roId": "RO-2fbeff18",
    "order": {
      "id": "ORD-e26cd240",
      "item": "lamp component",
      "status": "placed",
      "amountCents": 8900,
      "currency": "USD"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "1HGCV1F32NA078529",
    "noun": "lighting",
    "asOf": "2026-08-10",
    "roId": "RO-2fbeff18",
    "order": {
      "id": "ORD-e26cd240",
      "item": "lamp component",
      "status": "placed",
      "amountCents": 8900,
      "currency": "USD"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "shop-satellites-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Pay & settle

pay

lighting.pay · POST /lightings/pay · gate offer · sandbox · answers LightingPay@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) · /1HGCV1F32NA078529 (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.

EmitsLighting.charged@1 · ServiceOrder.settled@1.

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

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

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:13.675Z · HTTP 200
{
  "type": "OK",
  "answers": "LightingPay@1",
  "value": {
    "vin": "1HGCV1F32NA078529",
    "noun": "lighting",
    "asOf": "2026-08-10",
    "roId": "RO-2fbeff18",
    "payment": {
      "id": "PAY-27c524f6",
      "status": "settled",
      "amountCents": 8900,
      "currency": "USD"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "1HGCV1F32NA078529",
    "noun": "lighting",
    "asOf": "2026-08-10",
    "roId": "RO-2fbeff18",
    "payment": {
      "id": "PAY-27c524f6",
      "status": "settled",
      "amountCents": 8900,
      "currency": "USD"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "shop-satellites-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Fulfill & operate

assemblyReplace

lighting.assemblyReplace · POST /lightings/assembly-replace · gate offer · sandbox · answers LightingAssemblyReplace@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) · /1HGCV1F32NA078529 (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.

EmitsLighting.assemblyReplaced@1.

the SDK — lighting.assemblyReplace
import { lighting } from 'apis.vin'

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

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:13.640Z · HTTP 200
{
  "type": "OK",
  "answers": "LightingAssemblyReplace@1",
  "value": {
    "vin": "1HGCV1F32NA078529",
    "noun": "lighting",
    "asOf": "2026-08-10",
    "roId": "RO-2fbeff18",
    "work": {
      "id": "WO-8b5c6654",
      "operation": "assembly-replacement",
      "status": "scheduled",
      "costCents": 68500,
      "currency": "USD"
    }
  },
  "evidence": {
    "vin": "1HGCV1F32NA078529",
    "noun": "lighting",
    "asOf": "2026-08-10",
    "roId": "RO-2fbeff18",
    "work": {
      "id": "WO-8b5c6654",
      "operation": "assembly-replacement",
      "status": "scheduled",
      "costCents": 68500,
      "currency": "USD"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "shop-satellites-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

bulbReplace

lighting.bulbReplace · POST /lightings/bulb-replace · gate offer · sandbox · answers LightingBulbReplace@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) · /1HGCV1F32NA078529 (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.

EmitsLighting.bulbReplaced@1.

the SDK — lighting.bulbReplace
import { lighting } from 'apis.vin'

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

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:13.641Z · HTTP 200
{
  "type": "OK",
  "answers": "LightingBulbReplace@1",
  "value": {
    "vin": "1HGCV1F32NA078529",
    "noun": "lighting",
    "asOf": "2026-08-10",
    "roId": "RO-2fbeff18",
    "work": {
      "id": "WO-8b5c6654",
      "operation": "bulb-replacement",
      "status": "scheduled",
      "costCents": 4900,
      "currency": "USD"
    }
  },
  "evidence": {
    "vin": "1HGCV1F32NA078529",
    "noun": "lighting",
    "asOf": "2026-08-10",
    "roId": "RO-2fbeff18",
    "work": {
      "id": "WO-8b5c6654",
      "operation": "bulb-replacement",
      "status": "scheduled",
      "costCents": 4900,
      "currency": "USD"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "shop-satellites-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

More actions

aim

lighting.aim · POST /lightings/aim · gate offer · sandbox · answers LightingAim@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) · /1HGCV1F32NA078529 (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.

EmitsLighting.aimed@1.

the SDK — lighting.aim
import { lighting } from 'apis.vin'

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

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:13.640Z · HTTP 200
{
  "type": "OK",
  "answers": "LightingAim@1",
  "value": {
    "vin": "1HGCV1F32NA078529",
    "noun": "lighting",
    "asOf": "2026-08-10",
    "roId": "RO-2fbeff18",
    "work": {
      "id": "WO-8b5c6654",
      "operation": "headlamp-aim",
      "status": "aimed-to-spec",
      "toSpecDeg": -0.6
    }
  },
  "evidence": {
    "vin": "1HGCV1F32NA078529",
    "noun": "lighting",
    "asOf": "2026-08-10",
    "roId": "RO-2fbeff18",
    "work": {
      "id": "WO-8b5c6654",
      "operation": "headlamp-aim",
      "status": "aimed-to-spec",
      "toSpecDeg": -0.6
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "shop-satellites-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

restore

lighting.restore · POST /lightings/restore · gate offer · sandbox · answers LightingRestore@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) · /1HGCV1F32NA078529 (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.

EmitsLighting.restored@1.

the SDK — lighting.restore
import { lighting } from 'apis.vin'

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

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:13.676Z · HTTP 200
{
  "type": "OK",
  "answers": "LightingRestore@1",
  "value": {
    "vin": "1HGCV1F32NA078529",
    "noun": "lighting",
    "asOf": "2026-08-10",
    "roId": "RO-2fbeff18",
    "work": {
      "id": "WO-8b5c6654",
      "operation": "lens-restoration",
      "status": "scheduled",
      "costCents": 14900,
      "currency": "USD"
    }
  },
  "evidence": {
    "vin": "1HGCV1F32NA078529",
    "noun": "lighting",
    "asOf": "2026-08-10",
    "roId": "RO-2fbeff18",
    "work": {
      "id": "WO-8b5c6654",
      "operation": "lens-restoration",
      "status": "scheduled",
      "costCents": 14900,
      "currency": "USD"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "shop-satellites-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

retrofit

lighting.retrofit · POST /lightings/retrofit · gate offer · sandbox · answers LightingRetrofit@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) · /1HGCV1F32NA078529 (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.

EmitsLighting.retrofited@1.

the SDK — lighting.retrofit
import { lighting } from 'apis.vin'

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

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:13.676Z · HTTP 200
{
  "type": "OK",
  "answers": "LightingRetrofit@1",
  "value": {
    "vin": "1HGCV1F32NA078529",
    "noun": "lighting",
    "asOf": "2026-08-10",
    "roId": "RO-2fbeff18",
    "work": {
      "id": "WO-8b5c6654",
      "operation": "lighting-retrofit",
      "status": "scheduled",
      "costCents": 92500,
      "currency": "USD",
      "compliance": "dot-compliant-only"
    }
  },
  "evidence": {
    "vin": "1HGCV1F32NA078529",
    "noun": "lighting",
    "asOf": "2026-08-10",
    "roId": "RO-2fbeff18",
    "work": {
      "id": "WO-8b5c6654",
      "operation": "lighting-retrofit",
      "status": "scheduled",
      "costCents": 92500,
      "currency": "USD",
      "compliance": "dot-compliant-only"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "shop-satellites-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.