docs.vin

battery

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

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

Identity

Nounbattery
PillarServices (facets: 5 data · 8 services · 5 commerce)
Capabilities18 — 0 live · 18 sandbox · 0 declared
EntitiesRepairOrder
Doorsaggregator.vin · battery.vin
SDKVin.battery.* from apis.vin
Address/catalog/battery#{action} — the anchor IS the wire name minus battery.

Events

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

Discover & read

spec

battery.spec · GET /batteries/spec · gate none · sandbox · answers BatterySpec@1

FieldTypeRequiredNotes
vinstringno

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

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

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:07.874Z · HTTP 200
{
  "type": "OK",
  "answers": "BatterySpec@1",
  "value": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "spec": {
      "group": "48",
      "voltage": 12,
      "coldCrankingAmps": 650,
      "reserveMinutes": 120
    }
  },
  "evidence": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "spec": {
      "group": "48",
      "voltage": 12,
      "coldCrankingAmps": 650,
      "reserveMinutes": 120
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "condition-care-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

history

battery.history · GET /batteries/history · gate none · sandbox · answers BatteryHistory@1

FieldTypeRequiredNotes
vinstringno

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

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

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:07.855Z · HTTP 200
{
  "type": "OK",
  "answers": "BatteryHistory@1",
  "value": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "events": [
      {
        "date": "2024-03-14",
        "kind": "routine",
        "description": "routine battery record"
      },
      {
        "date": "2024-11-02",
        "kind": "routine",
        "description": "routine battery record"
      }
    ]
  },
  "evidence": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "events": [
      {
        "date": "2024-03-14",
        "kind": "routine",
        "description": "routine battery record"
      },
      {
        "date": "2024-11-02",
        "kind": "routine",
        "description": "routine battery record"
      }
    ]
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "condition-care-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

healthCheck

battery.healthCheck · GET /batteries/health-check · gate none · sandbox · answers BatteryHealthCheck@1

FieldTypeRequiredNotes
vinstringno

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

EmitsBattery.healthed@1.

the SDK — battery.healthCheck
import { battery } from 'apis.vin'

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await battery.healthCheck({"vin":"1C4AJWAG0HL539986"})
GET /batteries/health-check
curl 'https://apis.vin/batteries/health-check?vin=1C4AJWAG0HL539986'

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:07.855Z · HTTP 200
{
  "type": "OK",
  "answers": "BatteryHealthCheck@1",
  "value": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "bench": {
      "result": "passed",
      "ratedCca": 650,
      "measuredCca": 677
    }
  },
  "evidence": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "bench": {
      "result": "passed",
      "ratedCca": 650,
      "measuredCca": 677
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "condition-care-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

failurePredict

battery.failurePredict · GET /batteries/failure-predict · gate none · sandbox · answers BatteryFailurePredict@1

No input — this capability takes no request body.

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await battery.failurePredict()
GET /batteries/failure-predict
curl 'https://apis.vin/batteries/failure-predict'

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-16T14:50:09.631Z · HTTP 200
{
  "type": "OK",
  "answers": "BatteryFailurePredict@1",
  "value": {
    "vin": "1HGCM82633A004352",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "failureRiskPct": 2,
    "horizonMiles": 12000
  },
  "evidence": {
    "vin": "1HGCM82633A004352",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "failureRiskPct": 2,
    "horizonMiles": 12000
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "condition-care-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Quote & price

quote

battery.quote · POST /batteries/quote · gate offer · sandbox · answers BatteryQuote@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.

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

EmitsBattery.quoteRequested@1 · Battery.quoted@1.

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

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

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:07.867Z · HTTP 200
{
  "type": "OK",
  "answers": "BatteryQuote@1",
  "value": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "quote": {
      "id": "BQ-d40b863a",
      "unitCents": 22000,
      "laborCents": 4500,
      "amountCents": 26500,
      "currency": "USD",
      "status": "extended"
    }
  },
  "evidence": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "quote": {
      "id": "BQ-d40b863a",
      "unitCents": 22000,
      "laborCents": 4500,
      "amountCents": 26500,
      "currency": "USD",
      "status": "extended"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "condition-care-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Apply & book

order

battery.order · POST /batteries/order · gate offer · sandbox · answers BatteryOrder@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.

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

EmitsBattery.completed@1 · Battery.dispatched@1 · Battery.ordered@1 · Order.placed@1 · ServiceOrder.settled@1.

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

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

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:07.857Z · HTTP 200
{
  "type": "OK",
  "answers": "BatteryOrder@1",
  "value": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "order": {
      "id": "ORD-2e7d926e",
      "item": "replacement battery",
      "status": "placed",
      "amountCents": 22000,
      "currency": "USD"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "order": {
      "id": "ORD-2e7d926e",
      "item": "replacement battery",
      "status": "placed",
      "amountCents": 22000,
      "currency": "USD"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "condition-care-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

register

battery.register · POST /batteries/register · gate offer · sandbox · answers BatteryRegister@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.

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

EmitsBattery.registerRequested@1 · Battery.registered@1.

the SDK — battery.register
import { battery } from 'apis.vin'

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

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:07.868Z · HTTP 200
{
  "type": "OK",
  "answers": "BatteryRegister@1",
  "value": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "registration": {
      "id": "BR-fda34f9f",
      "status": "registered"
    }
  },
  "evidence": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "registration": {
      "id": "BR-fda34f9f",
      "status": "registered"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "condition-care-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Pay & settle

pay

battery.pay · POST /batteries/pay · gate offer · sandbox · answers BatteryPay@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.

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

EmitsBattery.charged@1 · Battery.paid@1 · Battery.payFailed@1 · Battery.payRequested@1 · ServiceOrder.settled@1.

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

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

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:07.867Z · HTTP 200
{
  "type": "OK",
  "answers": "BatteryPay@1",
  "value": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "payment": {
      "id": "PAY-b9d36290",
      "status": "settled",
      "amountCents": 26500,
      "currency": "USD"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "payment": {
      "id": "PAY-b9d36290",
      "status": "settled",
      "amountCents": 26500,
      "currency": "USD"
    },
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "condition-care-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

charge

battery.charge · POST /batteries/charge · gate offer · sandbox · answers BatteryCharge@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.

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

EmitsBattery.chargeRequested@1 · Battery.charged@1.

the SDK — battery.charge
import { battery } from 'apis.vin'

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

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:07.851Z · HTTP 200
{
  "type": "OK",
  "answers": "BatteryCharge@1",
  "value": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "charge": {
      "status": "charging",
      "method": "remote",
      "targetSocPct": 80
    }
  },
  "evidence": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "charge": {
      "status": "charging",
      "method": "remote",
      "targetSocPct": 80
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "condition-care-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

coreCharge

battery.coreCharge · POST /batteries/core-charge · gate offer · sandbox · answers BatteryCoreCharge@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.

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

EmitsBattery.coreChargeRequested@1 · Battery.coreCharged@1.

the SDK — battery.coreCharge
import { battery } from 'apis.vin'

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

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:07.855Z · HTTP 200
{
  "type": "OK",
  "answers": "BatteryCoreCharge@1",
  "value": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "coreChargeCents": 2200,
    "currency": "USD",
    "refundable": true,
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "evidence": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "coreChargeCents": 2200,
    "currency": "USD",
    "refundable": true,
    "payer": {
      "name": "Ava Good",
      "castRow": "super-prime",
      "creditTier": "super-prime"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "condition-care-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Fulfill & operate

replace

battery.replace · POST /batteries/replace · gate offer · sandbox · answers BatteryReplace@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.

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

EmitsBattery.replaceFailed@1 · Battery.replaceRequested@1 · Battery.replaced@1.

the SDK — battery.replace
import { battery } from 'apis.vin'

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

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:07.874Z · HTTP 200
{
  "type": "OK",
  "answers": "BatteryReplace@1",
  "value": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "work": {
      "id": "BW-c18abf22",
      "operation": "replace",
      "status": "not-yet-needed",
      "costCents": 26500,
      "currency": "USD"
    }
  },
  "evidence": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "work": {
      "id": "BW-c18abf22",
      "operation": "replace",
      "status": "not-yet-needed",
      "costCents": 26500,
      "currency": "USD"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "condition-care-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

inspect

battery.inspect · POST /batteries/inspect · gate offer · sandbox · answers BatteryInspect@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.

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

EmitsBattery.inspectRequested@1 · Battery.inspected@1.

the SDK — battery.inspect
import { battery } from 'apis.vin'

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

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:07.855Z · HTTP 200
{
  "type": "OK",
  "answers": "BatteryInspect@1",
  "value": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "bench": {
      "result": "passed",
      "ratedCca": 650,
      "measuredCca": 677
    }
  },
  "evidence": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "bench": {
      "result": "passed",
      "ratedCca": 650,
      "measuredCca": 677
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "condition-care-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

Authorize & resolve

warrantyClaim

battery.warrantyClaim · POST /batteries/warranty-claim · gate offer · sandbox · answers BatteryWarrantyClaim@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.

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

EmitsBattery.warrantyClaimFailed@1 · Battery.warrantyClaimFiled@1 · Battery.warrantyClaimRequested@1 · WarrantyClaim.approved@1 · WarrantyClaim.reimbursed@1.

the SDK — battery.warrantyClaim
import { battery } from 'apis.vin'

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

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:07.902Z · HTTP 200
{
  "type": "OK",
  "answers": "BatteryWarrantyClaim@1",
  "value": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "warranty": "expired",
    "claim": {
      "id": "WC-449e53fa",
      "decision": "denied",
      "reason": "coverage-expired"
    }
  },
  "evidence": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "warranty": "expired",
    "claim": {
      "id": "WC-449e53fa",
      "decision": "denied",
      "reason": "coverage-expired"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "condition-care-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

warrantyCheck

battery.warrantyCheck · GET /batteries/warranty-check · gate none · sandbox · answers BatteryWarrantyCheck@1

FieldTypeRequiredNotes
vinstringno

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

// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await battery.warrantyCheck({"vin":"1C4AJWAG0HL539986"})
GET /batteries/warranty-check
curl 'https://apis.vin/batteries/warranty-check?vin=1C4AJWAG0HL539986'

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:07.902Z · HTTP 200
{
  "type": "OK",
  "answers": "BatteryWarrantyCheck@1",
  "value": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "warranty": "expired",
    "void": false,
    "coverageMilesLeft": 0
  },
  "evidence": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "warranty": "expired",
    "void": false,
    "coverageMilesLeft": 0
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "condition-care-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

More actions

jump

battery.jump · POST /batteries/jump · gate offer · sandbox · answers BatteryJump@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.

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

EmitsBattery.jumpStarted@1.

the SDK — battery.jump
import { battery } from 'apis.vin'

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

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:07.856Z · HTTP 200
{
  "type": "OK",
  "answers": "BatteryJump@1",
  "value": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "jump": {
      "status": "jumped",
      "holdExpected": true
    }
  },
  "evidence": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "jump": {
      "status": "jumped",
      "holdExpected": true
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "condition-care-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

jumpstart

battery.jumpstart · POST /batteries/jumpstart · gate offer · sandbox · answers BatteryJumpstart@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.

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

EmitsBattery.jumpstartRequested@1 · Battery.jumpStarted@1.

the SDK — battery.jumpstart
import { battery } from 'apis.vin'

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

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:07.857Z · HTTP 200
{
  "type": "OK",
  "answers": "BatteryJumpstart@1",
  "value": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "jump": {
      "status": "jumped",
      "holdExpected": true
    }
  },
  "evidence": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "jump": {
      "status": "jumped",
      "holdExpected": true
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "condition-care-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

recycle

battery.recycle · POST /batteries/recycle · gate offer · sandbox · answers BatteryRecycle@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.

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

EmitsBattery.recycleFailed@1 · Battery.recycleRequested@1 · Battery.recycled@1.

the SDK — battery.recycle
import { battery } from 'apis.vin'

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

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:07.868Z · HTTP 200
{
  "type": "OK",
  "answers": "BatteryRecycle@1",
  "value": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "recycling": {
      "id": "BX-7d1c54e3",
      "status": "accepted",
      "coreCreditCents": 2200,
      "currency": "USD"
    }
  },
  "evidence": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "recycling": {
      "id": "BX-7d1c54e3",
      "status": "accepted",
      "coreCreditCents": 2200,
      "currency": "USD"
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "condition-care-sandbox"
  },
  "events": [],
  "meter": {
    "charged": "0.00",
    "posted": false
  }
}

test

battery.test · POST /batteries/test · gate offer · sandbox · answers BatteryTest@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.

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

EmitsBattery.testRequested@1 · Battery.tested@1.

the SDK — battery.test
import { battery } from 'apis.vin'

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

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:07.902Z · HTTP 200
{
  "type": "OK",
  "answers": "BatteryTest@1",
  "value": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "bench": {
      "result": "passed",
      "ratedCca": 650,
      "measuredCca": 677
    }
  },
  "evidence": {
    "vin": "1C4AJWAG0HL539986",
    "noun": "battery",
    "asOf": "2026-08-10",
    "verdict": "pass",
    "bench": {
      "result": "passed",
      "ratedCca": 650,
      "measuredCca": 677
    }
  },
  "provenance": {
    "simulated": true,
    "environment": "sandbox",
    "source": "condition-care-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

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.

Battery · 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.