inventory
The inventory noun — identity, lifecycle, events, and every capability as an anchored section: 22 capabilities, 0 live, 22 sandbox, 0 declared.
inventory is one of the estate's 317 automotive nouns — a job a car needs done. It carries 22 capabilities: 0 live, 22 sandbox, 0 declared · doors dealers.vin · aggregator.vin.
Identity
| Noun | inventory |
| Pillar | Services (facets: 8 data · 10 services · 4 commerce) |
| Capabilities | 22 — 0 live · 22 sandbox · 0 declared |
| Entities | InventoryItem |
| Doors | aggregator.vin · dealers.vin |
| SDK | Vin.inventory.* from apis.vin |
| Address | /catalog/inventory#{action} — the anchor IS the wire name minus inventory. |
Lifecycle
InventoryItem — StockingInventoryFSM: 10 states, 9 transitions — SOURCING · BIDDING · ACQUIRED · IN_TRANSIT · RECEIVED · INSPECTED · RECONDITIONED · FRONTLINE · FLOORED · LISTED. Each transition is a past-tense event on the record.
Events
The vocabulary this noun can append to the record — 18 past-tense, versioned event types, each linked to the capability that emits it:
Inventory.acquired@1— emitted byacquireInventory.batchScanned@1— emitted bybatchScanInventory.costedIn@1— emitted bycostInInventory.crossDealerLocated@1— emitted bycrossDealerLocateInventory.failed@1— emitted bycostIn·floorplan·repriceInventory.floorplanned@1— emitted byfloorplanInventory.frontlined@1— emitted byfrontlineInventory.moved@1— emitted bymoveInventory.repriced@1— emitted byrepriceInventory.staged@1— emitted bystageInventory.stockNumberAssigned@1— emitted byassignStockNumberInventory.stockedIn@1— emitted bystockInInventory.stockedOut@1— emitted bystockOutInventory.writtenOff@1— emitted bywriteOffListing.delisted@1— emitted bypostListing.listed@1— emitted bypostListing.repriced@1— emitted bypostOTD.posted@1— emitted bypost
Discover & read
read
inventory.read · GET /inventories/read · gate none · sandbox · answers InventoryRead@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — dealers.vin serves this noun on its two routes: / (the landing) · /5FNRL6H66TB032919 (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 { inventory } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.read({"vin":"5FNRL6H66TB032919"})curl 'https://apis.vin/inventories/read?vin=5FNRL6H66TB032919'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": "InventoryRead@1",
"value": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"inventory": {
"stockNumber": "STK-1cb88cee",
"inStock": true,
"stage": "not-in-recon",
"grade": "clean",
"ageDays": 15,
"askingPriceCents": 2300000,
"currency": "USD"
}
},
"evidence": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"inventory": {
"stockNumber": "STK-1cb88cee",
"inStock": true,
"stage": "not-in-recon",
"grade": "clean",
"ageDays": 15,
"askingPriceCents": 2300000,
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}decode
inventory.decode · GET /inventories/decode · gate none · sandbox · answers InventoryDecode@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — dealers.vin serves this noun on its two routes: / (the landing) · /5FNRL6H66TB032919 (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 { inventory } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.decode({"vin":"5FNRL6H66TB032919"})curl 'https://apis.vin/inventories/decode?vin=5FNRL6H66TB032919'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": "InventoryDecode@1",
"value": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"decoded": {
"vin": "5FNRL6H66TB032919",
"valid": true,
"squishVin": "5FNRL6H66TB"
}
},
"evidence": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"decoded": {
"vin": "5FNRL6H66TB032919",
"valid": true,
"squishVin": "5FNRL6H66TB"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}status
inventory.status · GET /inventories/status · gate none · sandbox · answers InventoryStatus@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — dealers.vin serves this noun on its two routes: / (the landing) · /5FNRL6H66TB032919 (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 { inventory } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.status({"vin":"5FNRL6H66TB032919"})curl 'https://apis.vin/inventories/status?vin=5FNRL6H66TB032919'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": "InventoryStatus@1",
"value": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"inventory": {
"stockNumber": "STK-1cb88cee",
"inStock": true,
"stage": "not-in-recon",
"grade": "clean",
"ageDays": 15,
"askingPriceCents": 2300000,
"currency": "USD"
}
},
"evidence": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"inventory": {
"stockNumber": "STK-1cb88cee",
"inStock": true,
"stage": "not-in-recon",
"grade": "clean",
"ageDays": 15,
"askingPriceCents": 2300000,
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}location
inventory.location · GET /inventories/location · gate none · sandbox · answers InventoryLocation@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — dealers.vin serves this noun on its two routes: / (the landing) · /5FNRL6H66TB032919 (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 { inventory } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.location({"vin":"5FNRL6H66TB032919"})curl 'https://apis.vin/inventories/location?vin=5FNRL6H66TB032919'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": "InventoryLocation@1",
"value": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"stockNumber": "STK-1cb88cee",
"location": {
"status": "inbound"
}
},
"evidence": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"stockNumber": "STK-1cb88cee",
"location": {
"status": "inbound"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}crossDealerLocate
inventory.crossDealerLocate · POST /inventories/cross-dealer-locate · gate key · sandbox · answers InventoryCrossDealerLocate@1
No input — this capability takes no request body.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /5FNRL6H66TB032919 (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 — Inventory.crossDealerLocated@1.
import { inventory } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.crossDealerLocate()curl -X POST https://apis.vin/inventories/cross-dealer-locate \
-H 'content-type: application/json' \
-d '{}'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": "InventoryCrossDealerLocate@1",
"value": {
"vin": "1HGCM82633A004352",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "NOT_IN_STOCK",
"matches": 3,
"nearestMiles": 187
},
"evidence": {
"vin": "1HGCM82633A004352",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "NOT_IN_STOCK",
"matches": 3,
"nearestMiles": 187
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}batchScan
inventory.batchScan · POST /inventories/batch-scan · gate key · sandbox · answers InventoryBatchScan@1
No input — this capability takes no request body.
Door — aggregator.vin serves this noun on its two routes: / (the landing) · /5FNRL6H66TB032919 (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 — Inventory.batchScanned@1.
import { inventory } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.batchScan()curl -X POST https://apis.vin/inventories/batch-scan \
-H 'content-type: application/json' \
-d '{}'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": "InventoryBatchScan@1",
"value": {
"vin": "1HGCM82633A004352",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "NOT_IN_STOCK",
"results": [
{
"vin": "1HGCM82633A004352",
"inStock": false,
"position": "NOT_IN_STOCK"
}
]
},
"evidence": {
"vin": "1HGCM82633A004352",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "NOT_IN_STOCK",
"results": [
{
"vin": "1HGCM82633A004352",
"inStock": false,
"position": "NOT_IN_STOCK"
}
]
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Quote & price
value
inventory.value · GET /inventories/value · gate key · sandbox · answers InventoryValue@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — dealers.vin serves this noun on its two routes: / (the landing) · /5FNRL6H66TB032919 (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 { inventory } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.value({"vin":"5FNRL6H66TB032919"})curl 'https://apis.vin/inventories/value?vin=5FNRL6H66TB032919'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": "InventoryValue@1",
"value": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"stockNumber": "STK-1cb88cee",
"value": {
"amountCents": 2300000,
"currency": "USD"
}
},
"evidence": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"stockNumber": "STK-1cb88cee",
"value": {
"amountCents": 2300000,
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}reprice
inventory.reprice · POST /inventories/reprice · gate offer · sandbox · answers InventoryReprice@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 — dealers.vin serves this noun on its two routes: / (the landing) · /5FNRL6H66TB032919 (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 — Inventory.failed@1 · Inventory.repriced@1.
import { inventory } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.reprice({"vin":"5FNRL6H66TB032919"})curl -X POST https://apis.vin/inventories/reprice \
-H 'content-type: application/json' \
-d '{"vin":"5FNRL6H66TB032919"}'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": "InventoryReprice@1",
"value": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"stockNumber": "STK-1cb88cee",
"reprice": {
"status": "refused",
"reason": "not-listed"
}
},
"evidence": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"stockNumber": "STK-1cb88cee",
"reprice": {
"status": "refused",
"reason": "not-listed"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}turnRate
inventory.turnRate · GET /inventories/turn-rate · gate key · sandbox · answers InventoryTurnRate@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — dealers.vin serves this noun on its two routes: / (the landing) · /5FNRL6H66TB032919 (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 { inventory } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.turnRate({"vin":"5FNRL6H66TB032919"})curl 'https://apis.vin/inventories/turn-rate?vin=5FNRL6H66TB032919'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": "InventoryTurnRate@1",
"value": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"turnDays": 40,
"targetDays": 45
},
"evidence": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"turnDays": 40,
"targetDays": 45
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}Apply & book
stage
inventory.stage · POST /inventories/stage · gate offer · sandbox · answers InventoryStage@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 — dealers.vin serves this noun on its two routes: / (the landing) · /5FNRL6H66TB032919 (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 — Inventory.staged@1.
import { inventory } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.stage({"vin":"5FNRL6H66TB032919"})curl -X POST https://apis.vin/inventories/stage \
-H 'content-type: application/json' \
-d '{"vin":"5FNRL6H66TB032919"}'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": "InventoryStage@1",
"value": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"stage": "not-in-recon",
"inStock": true
},
"evidence": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"stage": "not-in-recon",
"inStock": true
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}More actions
acquire
inventory.acquire · POST /inventories/acquire · gate offer · sandbox · answers InventoryAcquire@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 — dealers.vin serves this noun on its two routes: / (the landing) · /5FNRL6H66TB032919 (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 — Inventory.acquired@1.
import { inventory } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.acquire({"vin":"5FNRL6H66TB032919"})curl -X POST https://apis.vin/inventories/acquire \
-H 'content-type: application/json' \
-d '{"vin":"5FNRL6H66TB032919"}'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": "InventoryAcquire@1",
"value": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"stockNumber": "STK-1cb88cee",
"acquisition": {
"id": "ACQ-cd552254",
"status": "already-in-stock",
"costCents": 1850000,
"currency": "USD"
}
},
"evidence": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"stockNumber": "STK-1cb88cee",
"acquisition": {
"id": "ACQ-cd552254",
"status": "already-in-stock",
"costCents": 1850000,
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}age
inventory.age · GET /inventories/age · gate key · sandbox · answers InventoryAge@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — dealers.vin serves this noun on its two routes: / (the landing) · /5FNRL6H66TB032919 (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 { inventory } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.age({"vin":"5FNRL6H66TB032919"})curl 'https://apis.vin/inventories/age?vin=5FNRL6H66TB032919'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": "InventoryAge@1",
"value": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"stockNumber": "STK-1cb88cee",
"ageDays": 15
},
"evidence": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"stockNumber": "STK-1cb88cee",
"ageDays": 15
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}assignStockNumber
inventory.assignStockNumber · POST /inventories/assign-stock-number · gate offer · sandbox · answers InventoryAssignStockNumber@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 — dealers.vin serves this noun on its two routes: / (the landing) · /5FNRL6H66TB032919 (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 — Inventory.stockNumberAssigned@1.
import { inventory } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.assignStockNumber({"vin":"5FNRL6H66TB032919"})curl -X POST https://apis.vin/inventories/assign-stock-number \
-H 'content-type: application/json' \
-d '{"vin":"5FNRL6H66TB032919"}'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": "InventoryAssignStockNumber@1",
"value": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"assignment": {
"stockNumber": "STK-1cb88cee",
"status": "assigned"
}
},
"evidence": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"assignment": {
"stockNumber": "STK-1cb88cee",
"status": "assigned"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}cost
inventory.cost · GET /inventories/cost · gate key · sandbox · answers InventoryCost@1
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | no | — |
Door — dealers.vin serves this noun on its two routes: / (the landing) · /5FNRL6H66TB032919 (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 { inventory } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.cost({"vin":"5FNRL6H66TB032919"})curl 'https://apis.vin/inventories/cost?vin=5FNRL6H66TB032919'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": "InventoryCost@1",
"value": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"stockNumber": "STK-1cb88cee",
"cost": {
"amountCents": 1850000,
"currency": "USD",
"basis": "grade-banded"
}
},
"evidence": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"stockNumber": "STK-1cb88cee",
"cost": {
"amountCents": 1850000,
"currency": "USD",
"basis": "grade-banded"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}costIn
inventory.costIn · POST /inventories/cost-in · gate offer · sandbox · answers InventoryCostIn@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 — dealers.vin serves this noun on its two routes: / (the landing) · /5FNRL6H66TB032919 (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 — Inventory.costedIn@1 · Inventory.failed@1.
import { inventory } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.costIn({"vin":"5FNRL6H66TB032919"})curl -X POST https://apis.vin/inventories/cost-in \
-H 'content-type: application/json' \
-d '{"vin":"5FNRL6H66TB032919"}'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": "InventoryCostIn@1",
"value": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"stockNumber": "STK-1cb88cee",
"cost": {
"amountCents": 1850000,
"currency": "USD",
"basis": "grade-banded"
}
},
"evidence": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"stockNumber": "STK-1cb88cee",
"cost": {
"amountCents": 1850000,
"currency": "USD",
"basis": "grade-banded"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}floorplan
inventory.floorplan · POST /inventories/floorplan · gate offer · sandbox · answers InventoryFloorplan@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 — dealers.vin serves this noun on its two routes: / (the landing) · /5FNRL6H66TB032919 (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 — Inventory.failed@1 · Inventory.floorplanned@1.
import { inventory } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.floorplan({"vin":"5FNRL6H66TB032919"})curl -X POST https://apis.vin/inventories/floorplan \
-H 'content-type: application/json' \
-d '{"vin":"5FNRL6H66TB032919"}'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": "InventoryFloorplan@1",
"value": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"stockNumber": "STK-1cb88cee",
"floorplan": {
"floored": false,
"principalCents": 0,
"perDiemCents": 0,
"currency": "USD"
}
},
"evidence": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"stockNumber": "STK-1cb88cee",
"floorplan": {
"floored": false,
"principalCents": 0,
"perDiemCents": 0,
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}frontline
inventory.frontline · POST /inventories/frontline · gate offer · sandbox · answers InventoryFrontline@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 — dealers.vin serves this noun on its two routes: / (the landing) · /5FNRL6H66TB032919 (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 — Inventory.frontlined@1.
import { inventory } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.frontline({"vin":"5FNRL6H66TB032919"})curl -X POST https://apis.vin/inventories/frontline \
-H 'content-type: application/json' \
-d '{"vin":"5FNRL6H66TB032919"}'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": "InventoryFrontline@1",
"value": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"frontline": {
"status": "refused",
"reason": "recon-incomplete"
}
},
"evidence": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"frontline": {
"status": "refused",
"reason": "recon-incomplete"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}move
inventory.move · POST /inventories/move · gate offer · sandbox · answers InventoryMove@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 — dealers.vin serves this noun on its two routes: / (the landing) · /5FNRL6H66TB032919 (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 — Inventory.moved@1.
import { inventory } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.move({"vin":"5FNRL6H66TB032919"})curl -X POST https://apis.vin/inventories/move \
-H 'content-type: application/json' \
-d '{"vin":"5FNRL6H66TB032919"}'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": "InventoryMove@1",
"value": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"stockNumber": "STK-1cb88cee",
"move": {
"status": "not-on-lot"
}
},
"evidence": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"stockNumber": "STK-1cb88cee",
"move": {
"status": "not-on-lot"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}post
inventory.post · POST /inventories/post · gate key · sandbox · answers Listing@1
Promoted — earned its own page: /catalog/inventory.post (computed on every regen: price posted + carries its own stateSet).
| Field | Type | Required | Notes |
|---|---|---|---|
vin | string | yes | — |
price | string | yes | decimal |
stockNumber | string | no | — |
otd | object | no | — |
photos | array | no | — |
Door — dealers.vin serves this noun on its two routes: / (the landing) · /5FNRL6H66TB032919 (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 — Listing.delisted@1 · Listing.listed@1 · Listing.repriced@1 · OTD.posted@1.
import { inventory } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.post({"vin":"5FNRL6H66TB032919","price":"price"})curl -X POST https://apis.vin/inventories/post \
-H 'content-type: application/json' \
-d '{"vin":"5FNRL6H66TB032919","price":"price"}'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": "Listing@1",
"value": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"stockNumber": "STK-1cb88cee",
"post": {
"status": "refused",
"reason": "not-frontline"
}
},
"evidence": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"stockNumber": "STK-1cb88cee",
"post": {
"status": "refused",
"reason": "not-frontline"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": true
}
}stockIn
inventory.stockIn · POST /inventories/stock-in · gate offer · sandbox · answers InventoryStockIn@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 — dealers.vin serves this noun on its two routes: / (the landing) · /5FNRL6H66TB032919 (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 — Inventory.stockedIn@1.
import { inventory } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.stockIn({"vin":"5FNRL6H66TB032919"})curl -X POST https://apis.vin/inventories/stock-in \
-H 'content-type: application/json' \
-d '{"vin":"5FNRL6H66TB032919"}'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": "InventoryStockIn@1",
"value": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"stockNumber": "STK-1cb88cee",
"acquisition": {
"id": "ACQ-4406b8d1",
"status": "already-in-stock",
"costCents": 1850000,
"currency": "USD"
}
},
"evidence": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"stockNumber": "STK-1cb88cee",
"acquisition": {
"id": "ACQ-4406b8d1",
"status": "already-in-stock",
"costCents": 1850000,
"currency": "USD"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}stockOut
inventory.stockOut · POST /inventories/stock-out · gate offer · sandbox · answers InventoryStockOut@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 — dealers.vin serves this noun on its two routes: / (the landing) · /5FNRL6H66TB032919 (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 — Inventory.stockedOut@1.
import { inventory } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.stockOut({"vin":"5FNRL6H66TB032919"})curl -X POST https://apis.vin/inventories/stock-out \
-H 'content-type: application/json' \
-d '{"vin":"5FNRL6H66TB032919"}'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": "InventoryStockOut@1",
"value": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"stockNumber": "STK-1cb88cee",
"stockOut": {
"status": "stocked-out",
"channel": "retail-sale"
}
},
"evidence": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"stockNumber": "STK-1cb88cee",
"stockOut": {
"status": "stocked-out",
"channel": "retail-sale"
}
},
"provenance": {
"simulated": true,
"environment": "sandbox",
"source": "ownership-upkeep-sandbox"
},
"events": [],
"meter": {
"charged": "0.00",
"posted": false
}
}writeOff
inventory.writeOff · POST /inventories/write-off · gate offer · sandbox · answers InventoryWriteOff@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 — dealers.vin serves this noun on its two routes: / (the landing) · /5FNRL6H66TB032919 (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 — Inventory.writtenOff@1.
import { inventory } from 'apis.vin'
// the gate law is in the type system: Answer<T> = Ok | Empty | Blocked | Offer
const answer = await inventory.writeOff({"vin":"5FNRL6H66TB032919"})curl -X POST https://apis.vin/inventories/write-off \
-H 'content-type: application/json' \
-d '{"vin":"5FNRL6H66TB032919"}'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": "InventoryWriteOff@1",
"value": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"stockNumber": "STK-1cb88cee",
"writeOff": {
"status": "no-grounds",
"amountCents": 0,
"currency": "USD"
}
},
"evidence": {
"vin": "5FNRL6H66TB032919",
"noun": "inventory",
"asOf": "2026-08-10",
"position": "IN_TRANSIT",
"stockNumber": "STK-1cb88cee",
"writeOff": {
"status": "no-grounds",
"amountCents": 0,
"currency": "USD"
}
},
"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.
InventoryItem
Schema
| Property | Type | Notes |
|---|---|---|
vin | string | — |
rooftopId | ref→Rooftop | — |
stockNumber | string | — |
status | enum | frontlined|recon|wholesale |
Relationships
| From | To | Cardinality | As |
|---|---|---|---|
vehicle | inventory | 1:0..1 | stocked |
inventory | floorplan | 1:0..1 | floored |
null | inventory | 1:0..* | stocks |
Generated from the catalog. Every capability, answer, gate, and entity on this page is a rendered descriptor — it cannot drift from the wire.
interiorRepair
The interiorRepair noun — identity, lifecycle, events, and every capability as an anchored section: 12 capabilities, 0 live, 12 sandbox, 0 declared.
key
The key noun — identity, lifecycle, events, and every capability as an anchored section: 16 capabilities, 0 live, 16 sandbox, 0 declared.