charging
The charging noun — identity, lifecycle, events, and every capability as an anchored section: 21 capabilities, 0 live, 21 sandbox, 0 declared.
charging is one of the estate's 317 automotive nouns — a job a car needs done. It carries 21 capabilities: 0 live, 21 sandbox, 0 declared · doors aggregator.vin.
Identity
| Noun | charging |
| Pillar | Data (facets: 9 data · 6 services · 6 commerce) |
| Capabilities | 21 — 0 live · 21 sandbox · 0 declared |
| Entities | Usage |
| Doors | aggregator.vin |
| SDK | Vin.charging.* from apis.vin |
| Address | /catalog/charging#{action} — the anchor IS the wire name minus charging. |
Events
The vocabulary this noun can append to the record — 29 past-tense, versioned event types, each linked to the capability that emits it:
Charging.charged@1— emitted bypayCharging.paid@1— emitted bypayCharging.payFailed@1— emitted bypayCharging.payRequested@1— emitted bypayCharging.preConditionRequested@1— emitted bypreConditionCharging.preConditioned@1— emitted bypreConditionCharging.quoteRequested@1— emitted byquoteCharging.quoted@1— emitted byquoteCharging.reimburseRequested@1— emitted byreimburseCharging.reimbursed@1— emitted byreimburseCharging.reserveStallRequested@1— emitted byreserveStallCharging.reserveStalled@1— emitted byreserveStallCharging.roamBillRequested@1— emitted byroamBillCharging.roamBilled@1— emitted byroamBillCharging.scheduleRequested@1— emitted byscheduleCharging.scheduled@1— emitted byscheduleCharging.settleFailed@1— emitted bysettleCharging.settleRequested@1— emitted bysettleCharging.settled@1— emitted bysettleCharging.startRequested@1— emitted bystartCharging.started@1— emitted bystartCharging.stopRequested@1— emitted bystopCharging.stoped@1— emitted bystopCharging.stopped@1— emitted bystopCharging.subscribeRequested@1— emitted bysubscribeCharging.subscribed@1— emitted bysubscribeCharging.throttleRequested@1— emitted bythrottleCharging.throttled@1— emitted bythrottleServiceOrder.settled@1— emitted bypay
Discover & read
history
charging.history · GET /chargings/history · gate none · sandbox · answers ChargingHistory@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /4S4GUHD68T3804156 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
import { charging } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await charging.history({"vin":"4S4GUHD68T3804156"})curl 'https://apis.vin/chargings/history?vin=4S4GUHD68T3804156'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ChargingHistory@1",
"value": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"events": [
{
"date": "2024-03-14",
"kind": "routine",
"description": "routine charging session record"
},
{
"date": "2024-11-02",
"kind": "routine",
"description": "routine charging session record"
}
]
},
"evidence": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"events": [
{
"date": "2024-03-14",
"kind": "routine",
"description": "routine charging session record"
},
{
"date": "2024-11-02",
"kind": "routine",
"description": "routine charging session record"
}
]
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}availability
charging.availability · GET /chargings/availability · gate none · sandbox · answers ChargingAvailability@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /4S4GUHD68T3804156 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
import { charging } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await charging.availability({"vin":"4S4GUHD68T3804156"})curl 'https://apis.vin/chargings/availability?vin=4S4GUHD68T3804156'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ChargingAvailability@1",
"value": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"stallsOpen": 6,
"stallsTotal": 12
},
"evidence": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"stallsOpen": 6,
"stallsTotal": 12
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}connectorTypeLookup
charging.connectorTypeLookup · GET /chargings/connector-type-lookup · gate none · sandbox · answers ChargingConnectorTypeLookup@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /4S4GUHD68T3804156 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
import { charging } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await charging.connectorTypeLookup({"vin":"4S4GUHD68T3804156"})curl 'https://apis.vin/chargings/connector-type-lookup?vin=4S4GUHD68T3804156'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ChargingConnectorTypeLookup@1",
"value": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"connectors": {
"dc": "CCS",
"ac": "J1772"
}
},
"evidence": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"connectors": {
"dc": "CCS",
"ac": "J1772"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}speedLookup
charging.speedLookup · GET /chargings/speed-lookup · gate none · sandbox · answers ChargingSpeedLookup@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /4S4GUHD68T3804156 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
import { charging } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await charging.speedLookup({"vin":"4S4GUHD68T3804156"})curl 'https://apis.vin/chargings/speed-lookup?vin=4S4GUHD68T3804156'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ChargingSpeedLookup@1",
"value": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"speed": {
"maxKw": 150,
"connector": "CCS"
}
},
"evidence": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"speed": {
"maxKw": 150,
"connector": "CCS"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}sessionStatus
charging.sessionStatus · GET /chargings/session-status · gate none · sandbox · answers ChargingSessionStatus@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /4S4GUHD68T3804156 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
import { charging } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await charging.sessionStatus({"vin":"4S4GUHD68T3804156"})curl 'https://apis.vin/chargings/session-status?vin=4S4GUHD68T3804156'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ChargingSessionStatus@1",
"value": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"session": {
"id": "CS-9de4a6de",
"status": "completed",
"kwhDelivered": 27
}
},
"evidence": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"session": {
"id": "CS-9de4a6de",
"status": "completed",
"kwhDelivered": 27
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}stationLocate
charging.stationLocate · GET /chargings/station-locate · gate none · sandbox · answers ChargingStationLocate@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /4S4GUHD68T3804156 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
import { charging } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await charging.stationLocate({"vin":"4S4GUHD68T3804156"})curl 'https://apis.vin/chargings/station-locate?vin=4S4GUHD68T3804156'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ChargingStationLocate@1",
"value": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"station": {
"id": "STA-b3f18bf6",
"distanceMiles": 2,
"stallsOpen": 6
}
},
"evidence": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"station": {
"id": "STA-b3f18bf6",
"distanceMiles": 2,
"stallsOpen": 6
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Quote & price
quote
charging.quote · POST /chargings/quote · gate offer · sandbox · answers ChargingQuote@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /4S4GUHD68T3804156 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Charging.quoteRequested@1 · Charging.quoted@1.
import { charging } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await charging.quote({"vin":"4S4GUHD68T3804156"})curl -X POST https://apis.vin/chargings/quote \
-H 'content-type: application/json' \
-d '{"vin":"4S4GUHD68T3804156"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ChargingQuote@1",
"value": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"quote": {
"id": "CQ-250fb2b6",
"kwh": 27,
"amountCents": 1134,
"currency": "USD",
"status": "extended"
}
},
"evidence": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"quote": {
"id": "CQ-250fb2b6",
"kwh": 27,
"amountCents": 1134,
"currency": "USD",
"status": "extended"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}price
charging.price · GET /chargings/price · gate none · sandbox · answers ChargingPrice@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /4S4GUHD68T3804156 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
import { charging } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await charging.price({"vin":"4S4GUHD68T3804156"})curl 'https://apis.vin/chargings/price?vin=4S4GUHD68T3804156'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ChargingPrice@1",
"value": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"price": {
"perKwhCents": 42,
"idleFeePerMinCents": 40,
"currency": "USD"
}
},
"evidence": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"price": {
"perKwhCents": 42,
"idleFeePerMinCents": 40,
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}priceLookup
charging.priceLookup · GET /chargings/price-lookup · gate none · sandbox · answers ChargingPriceLookup@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /4S4GUHD68T3804156 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
import { charging } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await charging.priceLookup({"vin":"4S4GUHD68T3804156"})curl 'https://apis.vin/chargings/price-lookup?vin=4S4GUHD68T3804156'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ChargingPriceLookup@1",
"value": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"price": {
"perKwhCents": 42,
"idleFeePerMinCents": 40,
"currency": "USD"
}
},
"evidence": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"price": {
"perKwhCents": 42,
"idleFeePerMinCents": 40,
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Apply & book
schedule
charging.schedule · POST /chargings/schedule · gate offer · sandbox · answers ChargingSchedule@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /4S4GUHD68T3804156 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Charging.scheduleRequested@1 · Charging.scheduled@1.
import { charging } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await charging.schedule({"vin":"4S4GUHD68T3804156"})curl -X POST https://apis.vin/chargings/schedule \
-H 'content-type: application/json' \
-d '{"vin":"4S4GUHD68T3804156"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ChargingSchedule@1",
"value": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"command": {
"id": "CMD-87c263df",
"name": "schedule",
"status": "executed"
}
},
"evidence": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"command": {
"id": "CMD-87c263df",
"name": "schedule",
"status": "executed"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}subscribe
charging.subscribe · POST /chargings/subscribe · gate offer · sandbox · answers ChargingSubscribe@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /4S4GUHD68T3804156 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Charging.subscribeRequested@1 · Charging.subscribed@1.
import { charging } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await charging.subscribe({"vin":"4S4GUHD68T3804156"})curl -X POST https://apis.vin/chargings/subscribe \
-H 'content-type: application/json' \
-d '{"vin":"4S4GUHD68T3804156"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ChargingSubscribe@1",
"value": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"subscription": {
"id": "SB-1c3b8516",
"plan": "network-membership",
"amountCents": 1500,
"currency": "USD",
"status": "active"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"subscription": {
"id": "SB-1c3b8516",
"plan": "network-membership",
"amountCents": 1500,
"currency": "USD",
"status": "active"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Pay & settle
pay
charging.pay · POST /chargings/pay · gate offer · sandbox · answers ChargingPay@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /4S4GUHD68T3804156 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Charging.charged@1 · Charging.paid@1 · Charging.payFailed@1 · Charging.payRequested@1 · ServiceOrder.settled@1.
import { charging } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await charging.pay({"vin":"4S4GUHD68T3804156"})curl -X POST https://apis.vin/chargings/pay \
-H 'content-type: application/json' \
-d '{"vin":"4S4GUHD68T3804156"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ChargingPay@1",
"value": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"payment": {
"id": "PAY-afb4987c",
"status": "settled",
"amountCents": 1134,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"payment": {
"id": "PAY-afb4987c",
"status": "settled",
"amountCents": 1134,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}settle
charging.settle · POST /chargings/settle · gate offer · sandbox · answers ChargingSettle@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /4S4GUHD68T3804156 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Charging.settleFailed@1 · Charging.settleRequested@1 · Charging.settled@1.
import { charging } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await charging.settle({"vin":"4S4GUHD68T3804156"})curl -X POST https://apis.vin/chargings/settle \
-H 'content-type: application/json' \
-d '{"vin":"4S4GUHD68T3804156"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ChargingSettle@1",
"value": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"payment": {
"id": "PAY-05d7ad55",
"status": "settled",
"amountCents": 1134,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"payment": {
"id": "PAY-05d7ad55",
"status": "settled",
"amountCents": 1134,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}reimburse
charging.reimburse · POST /chargings/reimburse · gate offer · sandbox · answers ChargingReimburse@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /4S4GUHD68T3804156 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Charging.reimburseRequested@1 · Charging.reimbursed@1.
import { charging } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await charging.reimburse({"vin":"4S4GUHD68T3804156"})curl -X POST https://apis.vin/chargings/reimburse \
-H 'content-type: application/json' \
-d '{"vin":"4S4GUHD68T3804156"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ChargingReimburse@1",
"value": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"reimbursement": {
"id": "CR-857f35fe",
"status": "issued",
"amountCents": 1134,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"reimbursement": {
"id": "CR-857f35fe",
"status": "issued",
"amountCents": 1134,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}roamBill
charging.roamBill · POST /chargings/roam-bill · gate offer · sandbox · answers ChargingRoamBill@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /4S4GUHD68T3804156 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Charging.roamBillRequested@1 · Charging.roamBilled@1.
import { charging } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await charging.roamBill({"vin":"4S4GUHD68T3804156"})curl -X POST https://apis.vin/chargings/roam-bill \
-H 'content-type: application/json' \
-d '{"vin":"4S4GUHD68T3804156"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ChargingRoamBill@1",
"value": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"bill": {
"id": "RB-b0493083",
"kind": "roaming",
"status": "issued",
"amountCents": 1134,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"evidence": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"bill": {
"id": "RB-b0493083",
"kind": "roaming",
"status": "issued",
"amountCents": 1134,
"currency": "USD"
},
"payer": {
"name": "Ava Good",
"castRow": "super-prime",
"creditTier": "super-prime"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}More actions
preCondition
charging.preCondition · POST /chargings/pre-condition · gate offer · sandbox · answers ChargingPreCondition@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /4S4GUHD68T3804156 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Charging.preConditionRequested@1 · Charging.preConditioned@1.
import { charging } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await charging.preCondition({"vin":"4S4GUHD68T3804156"})curl -X POST https://apis.vin/chargings/pre-condition \
-H 'content-type: application/json' \
-d '{"vin":"4S4GUHD68T3804156"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ChargingPreCondition@1",
"value": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"command": {
"id": "CMD-8edd3a34",
"name": "preCondition",
"status": "executed"
}
},
"evidence": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"command": {
"id": "CMD-8edd3a34",
"name": "preCondition",
"status": "executed"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}rangeAdded
charging.rangeAdded · GET /chargings/range-added · gate none · sandbox · answers ChargingRangeAdded@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /4S4GUHD68T3804156 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
import { charging } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await charging.rangeAdded({"vin":"4S4GUHD68T3804156"})curl 'https://apis.vin/chargings/range-added?vin=4S4GUHD68T3804156'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ChargingRangeAdded@1",
"value": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"rangeAddedMiles": 185,
"kwhDelivered": 27
},
"evidence": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"rangeAddedMiles": 185,
"kwhDelivered": 27
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}reserveStall
charging.reserveStall · POST /chargings/reserve-stall · gate offer · sandbox · answers ChargingReserveStall@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /4S4GUHD68T3804156 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Charging.reserveStallRequested@1 · Charging.reserveStalled@1.
import { charging } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await charging.reserveStall({"vin":"4S4GUHD68T3804156"})curl -X POST https://apis.vin/chargings/reserve-stall \
-H 'content-type: application/json' \
-d '{"vin":"4S4GUHD68T3804156"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ChargingReserveStall@1",
"value": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"reservation": {
"id": "RSV-dbc302c6",
"stall": "S-5",
"status": "reserved"
}
},
"evidence": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"reservation": {
"id": "RSV-dbc302c6",
"stall": "S-5",
"status": "reserved"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}start
charging.start · POST /chargings/start · gate offer · sandbox · answers ChargingStart@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /4S4GUHD68T3804156 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Charging.startRequested@1 · Charging.started@1.
import { charging } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await charging.start({"vin":"4S4GUHD68T3804156"})curl -X POST https://apis.vin/chargings/start \
-H 'content-type: application/json' \
-d '{"vin":"4S4GUHD68T3804156"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ChargingStart@1",
"value": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"session": {
"id": "CS-9de4a6de",
"status": "started",
"maxKw": 150
}
},
"evidence": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"session": {
"id": "CS-9de4a6de",
"status": "started",
"maxKw": 150
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}stop
charging.stop · POST /chargings/stop · gate offer · sandbox · answers ChargingStop@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /4S4GUHD68T3804156 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Charging.stopRequested@1 · Charging.stoped@1 · Charging.stopped@1.
import { charging } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await charging.stop({"vin":"4S4GUHD68T3804156"})curl -X POST https://apis.vin/chargings/stop \
-H 'content-type: application/json' \
-d '{"vin":"4S4GUHD68T3804156"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ChargingStop@1",
"value": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"session": {
"id": "CS-9de4a6de",
"status": "stopped",
"kwhDelivered": 27
}
},
"evidence": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"session": {
"id": "CS-9de4a6de",
"status": "stopped",
"kwhDelivered": 27
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}throttle
charging.throttle · POST /chargings/throttle · gate offer · sandbox · answers ChargingThrottle@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
The gate is a 402 OFFER — the price and a hard ceiling on the wire, with a durable intent that executes on settlement. Never a wall, never "contact sales". Price: not posted — see /pricing.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /4S4GUHD68T3804156 (the VIN lens).
Try it — sandbox: every call answers a deterministic, provenance-labeled simulated payload ({ environment, simulated } in the body). Force any documented outcome with the magic triggers. Going live is a connect, never a ballot: submit the credential at integrates.vin (dealer systems) or connects.vin (consumer accounts) — submissions enter the activation queue and rank live rollout.
Emits — Charging.throttleRequested@1 · Charging.throttled@1.
import { charging } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await charging.throttle({"vin":"4S4GUHD68T3804156"})curl -X POST https://apis.vin/chargings/throttle \
-H 'content-type: application/json' \
-d '{"vin":"4S4GUHD68T3804156"}'Receipt — the sandbox wire answered the request above with this exact body at build time. Captured by the receipts runner (timestamped, provenance in the payload), never authored; it re-executes only when this descriptor changes.
{
"type": "OK",
"answers": "ChargingThrottle@1",
"value": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"throttle": {
"rate": "full-rate",
"maxKw": 150
}
},
"evidence": {
"vin": "4S4GUHD68T3804156",
"noun": "charging",
"asOf": "2026-08-10",
"readiness": "ready",
"throttle": {
"rate": "full-rate",
"maxKw": 150
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-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.
Usage
Generated from the catalog. Every capability, answer, gate, and entity on this page is a rendered descriptor — it cannot drift from the wire.
chargerHardware
The chargerHardware noun — identity, lifecycle, events, and every capability as an anchored section: 14 capabilities, 0 live, 14 sandbox, 0 declared.
conditionReport
The conditionReport noun — identity, lifecycle, events, and every capability as an anchored section: 23 capabilities, 0 live, 23 sandbox, 0 declared.